C 比較dynamic和Dictionary效能

2022-02-20 15:46:24 字數 1497 閱讀 4213

標題可能不準確。

開發中需要傳遞變參,考慮使用 dynamic 還是 dictionary(準確地說是dictionary)。

dynamic 的編碼體驗顯著優於 dictionary,如果效能差距不大的話,我會選擇使用dynamic。

搜尋後沒有找到類似對比資料,決定自行實驗。

首先使用以下測試**:

public

void

testdynamic()

);

int v =e.value;

}public

void

testdictionary()

private

dynamic calldynamic(dynamic test);}

private dictionarycalldictionary(

dictionary

test)

分別比較執行 1次、10次、100次、1000次、1e4次、1e5次、1e6次 時間

結果:

其中dynamic列和dynamic2列的資料分別是:

在一次執行中執行一步測試 和 在一次執行中連續執行所有測試

分析測試過程和資料,得到以下結論:

1.dynamic首次使用會產生一定的效能損耗

2.無論是否首次使用,使用次數達到一定量級,dynamic效能一定優於dictionary

3.一次執行中連續使用dynamic會顯著拉低平均效能損耗

考慮到傳遞變參可能出現多個引數,以上測試不完全。

使用以下**進行第二階段實驗:

public

void

invokedynamic()

);

int v1 =e.value1;

long v2 =e.value2;

float v3 =e.value3;

double v4 =e.value4;

string v5 =e.value5;

}public

void

invokedictionary()

private

dynamic calldynamic2(dynamic test);}

private dictionarycalldictionary2(

dictionary

test)

結果資料:

最後決定選擇使用dynamic

有兄弟考慮可能box損耗了效能導致dictionary表現不佳,

專門做了第三階段實驗,對比dynamic和dictionary

具體資料不貼了,結果是dynamic在100000量級快一倍

C 中 Var 和 dynamic 整理介紹

常有人會拿var這個關鍵字來和dynamic做比較。實際上,var和dynamic完全是兩個概念,根本不應該放在一起做比較。var實際上是編譯期拋給我們的 語法糖 一旦被編譯,編譯期會自動匹配var 變數的實際型別,並用實際型別來替換該變數的申明,這看上去就好像我們在編碼的時候是用實際型別進行申明的...

C 資料型別(dynamic)

自己在寫重構的時候用到了dynamic這個函式,然後就去網上找個找關於這個函式的有關內容,首先是對這個函式認識。關於這個函式乙個籠統的認識就是這個函式和var一樣是個萬能函式,什麼樣的資料型別符合,如果我們在用到用於接受一些資料的時候,但是這個傳過來的資料型別我們不知道是什麼型別的,那我們就可以用d...

C 4 0中var和dynamic的區別

1.var表示 變數的型別是在編譯時決定的 var讓你在初始化變數時少輸入一些字,編譯器會根據右值來推斷出變數的型別,var只能用於區域性變數的定義,你不能把類的屬性定義成 var,也不能把方法的返回值型別或者是引數型別定義成var 2.dynamic表示 變數的型別是在執行時決定的 動態語言執行時...