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ò)誤。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注