標題可能不準確。
開發中需要傳遞變參,考慮使用 dynamic 還是 dictionary(準確地說是dictionary)。
dynamic 的編碼體驗顯著優於 dictionary,如果效能差距不大的話,我會選擇使用dynamic。
搜尋後沒有找到類似對比資料,決定自行實驗。
首先使用以下測試**:
public分別比較執行 1次、10次、100次、1000次、1e4次、1e5次、1e6次 時間void
testdynamic()
);
int v =e.value;
}public
void
testdictionary()
private
dynamic calldynamic(dynamic test);}
private dictionarycalldictionary(
dictionary
test)
結果:
其中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表示 變數的型別是在執行時決定的 動態語言執行時...