真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C#怎么比較dynamic和Dictionary性能

C#怎么比較dynamic和Dictionary性能,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

公司主營(yíng)業(yè)務(wù):網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)公司推出葉集免費(fèi)做網(wǎng)站回饋大家。

開發(fā)中需要傳遞變參,考慮使用 dynamic 還是  Dictionary(準(zhǔn)確地說是Dictionary)。dynamic 的編碼體驗(yàn)顯著優(yōu)于  Dictionary,如果性能差距不大的話,我會(huì)選擇使用dynamic。搜索后沒有找到類似對(duì)比數(shù)據(jù),決定自行實(shí)驗(yàn)。

首先使用以下測(cè)試代碼:

public void TestDynamic() {     var e = CallDynamic(new { Value = 0 });     int v = e.Value; }  public void TestDictionary() {     var dict = new Dictionary();     dict["Value"] = 0;     dict = CallDictionary(dict);     int v = (int)dict["Value"]; }  private dynamic CallDynamic(dynamic test) {     int v = test.Value;     v++;     return new { Value = v }; }  private Dictionary CallDictionary(     Dictionary test) {     int v = (int)test["Value"];     v++;     var dict = new Dictionary();     dict["Value"] = v;     return dict; }

分別比較運(yùn)行 1次、10次、100次、1000次、1e4次、1e5次、1e6次 時(shí)間
結(jié)果:

C#怎么比較dynamic和Dictionary性能

其中dynamic列和dynamic2列的數(shù)據(jù)分別是:

在一次運(yùn)行中執(zhí)行一步測(cè)試 和 在一次運(yùn)行中連續(xù)執(zhí)行所有測(cè)試

分析測(cè)試過程和數(shù)據(jù),得到以下結(jié)論:

1.dynamic***使用會(huì)產(chǎn)生一定的性能損耗
2.無(wú)論是否***使用,使用次數(shù)達(dá)到一定量級(jí),dynamic性能一定優(yōu)于Dictionary
3.一次運(yùn)行中連續(xù)使用dynamic會(huì)顯著拉低平均性能損耗

考慮到傳遞變參可能出現(xiàn)多個(gè)參數(shù),以上測(cè)試不完全。

使用以下代碼進(jìn)行第二階段實(shí)驗(yàn):

public void InvokeDynamic() {     var e = CallDynamic2(         new { Value1 = 0, Value2 = 0L, Value3 = 0f, Value4 = 0.0, Value5 = "test" });     int v1 = e.Value1;     long v2 = e.Value2;     float v3 = e.Value3;     double v4 = e.Value4;     string v5 = e.Value5; }  public void InvokeDictionary() {     var dict = new Dictionary();     dict["Value1"] = 0;     dict["Value2"] = 0L;     dict["Value3"] = 0f;     dict["Value4"] = 0.0;     dict["Value5"] = "test";     dict = CallDictionary2(dict);     int v1 = (int)dict["Value1"];     long v2 = (long)dict["Value2"];     float v3 = (float)dict["Value3"];     double v4 = (double)dict["Value4"];     string v5 = (string)dict["Value5"]; }  private dynamic CallDynamic2(dynamic test) {     int v1 = test.Value1;     long v2 = test.Value2;     float v3 = test.Value3;     double v4 = test.Value4;     string v5 = test.Value5;     v1++;     v2++;     v3++;     v4++;     v5 += "test";     return new { Value1 = v1, Value2 = v2, Value3 = v3, Value4 = v4, Value5 = v5 }; }  private Dictionary CallDictionary2(     Dictionary test) {     int v1 = (int)test["Value1"];     long v2 = (long)test["Value2"];     float v3 = (float)test["Value3"];     double v4 = (double)test["Value4"];     string v5 = (string)test["Value5"];     v1++;     v2++;     v3++;     v4++;     v5 += "test";     var dict = new Dictionary();     dict["Value1"] = v1;     dict["Value2"] = v2;     dict["Value3"] = v3;     dict["Value4"] = v4;     dict["Value5"] = v5;     return dict; }

結(jié)果數(shù)據(jù):

C#怎么比較dynamic和Dictionary性能

決定選擇使用dynamic

有兄弟考慮可能Box損耗了性能導(dǎo)致Dictionary表現(xiàn)不佳,
專門做了第三階段實(shí)驗(yàn),對(duì)比dynamic和Dictionary

具體數(shù)據(jù)不貼了,結(jié)果是dynamic在100000量級(jí)快一倍

看完上述內(nèi)容,你們掌握C#怎么比較dynamic和Dictionary性能的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!


網(wǎng)站標(biāo)題:C#怎么比較dynamic和Dictionary性能
標(biāo)題路徑:http://weahome.cn/article/gepedh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部