c 沒有指標導致的效能問題研究一二

2022-01-13 10:14:38 字數 1061 閱讀 8432

題目起的好吧。

結構型別可以在棧分配空間,而引用型別只能分配指標。

通過陣列,結構型別可以分配乙個連續的空間和乙個指標。

陣列結合引用型別只能分配連續的指標,和零散的空間。這是效能問題的乙個潛在點。

因此要做序列化的東西,而又比較在意效能,陣列結合結構型別是有必要的。

沒有指標,可以用下標來訪問,也就是列舉陣列的元素,需要返回陣列本身(指標)和他當前的下標(自然數)兩樣東西,這沒有指標方便,但基本可以滿足要求。

問題是,很多資料結構的api並不返回陣列和下標,而是返回值本身。如果該值是引用型別,那麼還能當指標來使用,如果該值是值型別,那就不能列舉元素了。

也許我們不需要列舉元素,只需要改變元素,提取值型別元素就是轉殖乙份這種設定,也是效能問題的潛在點。

想返回指標而不是值怎麼辦?返回可以訪問它的物件和訪問的方法引數。

如二叉樹,節點物件持有值型別,而有兩個指標指向左右節點。一般資料結構api返回值,那麼你就無法修改該節點的。唯一的方法是你返回該節點。

如陣列,節點是值,返回值就無法修改這個節點的值,而需要返回陣列,和該節點的下標。

.net自帶的類庫我們沒辦法更改,但是要實現高效能的資料結構,就需要考慮提供引用訪問的介面,避免無意義的複製。

c#自帶的可列舉型別(ienumerable),列舉器(ienumerator)類似以上概念,但是返回的當前列舉所持有的值是不可修改的,第二,它是乙個遍歷用途的工具,從0開始,而不是從你需要使用的項開始。比如你想返回陣列第3項,但是可列舉型別會返回乙個列舉器,它的下標是從-1開始的。

理想的設計應該類似是:

class torset}

public bool move()else return flase;};

public tor(node n, int index);

tort = new tor(m, 2);

t.value = 5;

while (t.move) t.value  = 0;

listlist = new list(enumerable.rangle(0,4));

tor,int> t = new tor(list, 2);

SWAP導致的效能問題

db維護過程中,我們常說的使用太多swap會導致效能問題,原因是 當應用程式要請求新的記憶體頁的時候,如果已經沒有足夠的物理記憶體,就會把目前物理記憶體中的一部分空間釋放出來,以供當前執行的程式使用。這部分被釋放的空間可能屬於某乙個程式,並且所謂的釋放,是把這部分記憶體頁存放到swap空間。如果這個...

導致效能問題的常見情況

下面列出一些導致效能問題的常見情況.區分效能問題的乙個重要指標是cpu的利用率.總結 cpu利用率 負載低正常 高低資源爭用,資源被執行緒長時間占有,導致所有工作執行緒都處於等待狀態,導致cpu使用率低.正常都正常,只是響應時間總比設計中的響應時間慢一點點,那麼很可能是在某乙個細節上的優化不夠.如不...

關於C 指標的研究

這2天,為了應付實習公司的面試,要求我在windows下寫乙個俄羅斯方塊出來 以前用j2me寫過乙個俄羅斯方塊,基本演算法和資料結構都有一定的考慮了,可動手開寫的時候c 的指標很是把我鬱悶了一陣,特別是關於陣列的指標和指標陣列等,一多了就攪在一起搞不清楚,昨天花了一下午基本上算是搞懂了,在這裡做個總...