亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

怎么使用“var”會影響性能嗎?

怎么使用“var”會影響性能嗎?

明月笑刀無情 2019-10-16 09:09:20
使用“var”會影響性能嗎?早些時候我問了一個問題為什么我看到這么多例子使用var關鍵詞并且得到的答案是,雖然只對匿名類型有必要,但它還是用來使代碼編寫“更快”/更容易和“僅僅是因為”。以下這個鏈接(“C#3.0-Var不是objec”)我看到了var在IL中編譯到正確的類型(您將看到它大約在下一篇文章中)。我的問題是,IL代碼使用var關鍵字接受,如果代碼在任何地方都被使用,那么它會不會接近于一個可測量的代碼性能的水平
查看完整描述

3 回答

?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

沒有額外的IL代碼var關鍵字:對于非匿名類型,產生的IL應該是相同的。如果編譯器無法創建該IL,因為它無法確定您打算使用哪種類型,那么您將得到一個編譯器錯誤。

唯一的訣竅是var如果要手動設置接口或父類型,則將推斷該類型的確切類型。


8年后更新

我需要更新這一點,因為我的理解已經改變。我現在相信這是可能的var若要影響在方法返回接口的情況下的性能,但您應該使用精確的類型。例如,如果您有此方法:

IList<int> Foo(){
    return Enumerable.Range(0,10).ToList();}

考慮這三行代碼來調用該方法:

List<int> bar1 = Foo();IList<int> bar = Foo();var bar3 = Foo();

這三個編譯和執行都是預期的。但是,前兩行是完全相同,第三行將匹配第二行,而不是第一行。因為.的簽名Foo()是返回一個IList<int>,這就是編譯器將如何構建bar3變量。

從性能的角度來看,大多數情況下你不會注意到。然而,在某些情況下第三行的性能可能不如第一行的速度快。..當您繼續使用bar3變量時,編譯器可能無法以相同的方式分派方法調用。

請注意,抖動可能(可能甚至)能夠消除這種差異,但這并不一定。一般來說,你還是應該考慮var在性能上是一個非因素。當然一點也不像使用dynamic變量。但是說它一點也不重要,這可能是夸大了它。



查看完整回答
反對 回復 2019-10-17
  • 3 回答
  • 0 關注
  • 803 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號