国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

C#中var、int、object性能比較(已修正)

2019-11-14 13:38:17
字體:
供稿:網(wǎng)友

var關(guān)鍵字是.net3.5推出的關(guān)鍵字,主要是讓編譯器自動(dòng)推斷并判斷變量類型,類似javascript中的var。

在使用一些性能優(yōu)化軟件時(shí),在代碼優(yōu)化時(shí),我發(fā)現(xiàn)不管定義什么類型的變量,變量的類型都統(tǒng)統(tǒng)換成var。難道var的性能比具體的類型和object都要高?

 

實(shí)踐出真知:

新建一個(gè)控制臺(tái)應(yīng)用程序

 

 1  class PRogram { 2         static void Main(string[] args) { 3  4             for (int i = 0; i < 10; i++) 5             { 6                 Test(); 7                 Console.WriteLine(); 8             } 9 10           11 12             Console.Read();13         }14 15 16         public static void Test()17         {18 19             Stopwatch stw = new Stopwatch();20             Stopwatch stw1 = new Stopwatch();21             Stopwatch stw2 = new Stopwatch();22 23 24             /*Object性能測(cè)試 */25             stw2.Start();//開始時(shí)間26 27             List<int> intlist3 = new List<int>();28             for( int i = 0; i < 10000000; i++ ) {29                 object index = i;//使用object轉(zhuǎn)入和轉(zhuǎn)出30                 intlist3.Add((int)index);31             }32             stw2.Stop();33             Console.WriteLine("obj:{0}", stw2.Elapsed.Ticks);34 35 36             /*Var 性能測(cè)試 */37 38 39             List<int> intlist = new List<int>();40             stw1.Start();41             for( int i = 0; i < 10000000; i++ ) {42                 var index = i;//使用var轉(zhuǎn)入和轉(zhuǎn)出43                 intlist.Add(index);44             }45             stw1.Stop();46 47             Console.WriteLine("Var:{0}", stw1.Elapsed.Ticks);48 49             /*Int 性能測(cè)試 */50 51 52             List<int> intlist2 = new List<int>();53             stw.Start();//重新開始計(jì)時(shí)54             for( int i = 0; i < 10000000; i++ ) {55                 int index = i;//使用int轉(zhuǎn)入和轉(zhuǎn)出56                 intlist2.Add(index);57             }58             stw.Stop();59 60             Console.WriteLine("int:{0}", stw.Elapsed.Ticks);61 62             63         }64 65     }

 

 

測(cè)試結(jié)果:

 

分析:

通過查閱文檔和書籍,var是隱式類型的局部變量 主要是方便書寫。在編譯期間,早已把var替換為實(shí)際推斷的類型(這里是int),而object多了一個(gè)裝箱拆箱的操作,

耗時(shí)自然是最長(zhǎng)的。

以下是筆者對(duì)程序進(jìn)行反編譯(C# 和 IL)后的截圖,我們可以清晰滴看到多余的代碼已經(jīng)被優(yōu)化,而所謂的var也不見了。在IL源碼中,明顯的看到object在循環(huán)的時(shí)候有裝箱拆箱的操作。

 

反編譯的C#代碼:(已經(jīng)被優(yōu)化)

object測(cè)試的IL:

 

 

var測(cè)試的IL:

 

int測(cè)試的IL:

 

 

 

總結(jié):

 var性能 ≈ int > object

   object 類型牽涉裝箱拆箱的問題,自然是效率最慢的。

    但從測(cè)試結(jié)果來看,var類型的性能與int不相上下,但在測(cè)試結(jié)果中可以看到大部分var耗時(shí)會(huì)超過int。 實(shí)際上var在編譯的時(shí)候已經(jīng)確定類型了

PS:最后感謝朋友們對(duì)筆者之前測(cè)試的錯(cuò)誤指正,多交流才能更好的提高自己,增加見聞,積累人脈,這也是筆者寫博客的意義,否則這個(gè)知識(shí)點(diǎn)認(rèn)識(shí),對(duì)筆者來講可能永遠(yuǎn)是一個(gè)錯(cuò)誤。

 


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁城县| 钟山县| 个旧市| 察哈| 长乐市| 科技| 康平县| 瑞昌市| 依安县| 乐山市| 建瓯市| 连南| 建宁县| 酉阳| 邓州市| 公安县| 新泰市| 防城港市| 通江县| 梁平县| 红原县| 泉州市| 通渭县| 嵊州市| 东山县| 龙山县| 珲春市| 武清区| 正阳县| 乌审旗| 凌海市| 大洼县| 长子县| 崇明县| 石棉县| 乌兰察布市| 共和县| 遂川县| 兖州市| 绥阳县| 石柱|