第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

使用“var”會(huì)影響性能嗎?

使用“var”會(huì)影響性能嗎?

瀟湘沐 2019-07-15 14:59:35
使用“var”會(huì)影響性能嗎?早些時(shí)候我問(wèn)了一個(gè)問(wèn)題為什么我看到這么多例子使用var關(guān)鍵詞并且得到的答案是,雖然只對(duì)匿名類型有必要,但它還是用來(lái)使代碼編寫“更快”/更容易和“僅僅是因?yàn)椤?。以下這個(gè)鏈接(“C#3.0-Var不是objec”)我看到了var在IL中編譯到正確的類型(您將看到它大約在下一篇文章中)。我的問(wèn)題是,IL代碼使用var關(guān)鍵字接受,如果代碼在任何地方都被使用,那么它會(huì)不會(huì)接近于一個(gè)可測(cè)量的代碼性能的水平?
查看完整描述

3 回答

?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊

沒(méi)有額外的IL代碼var關(guān)鍵字:對(duì)于非匿名類型,產(chǎn)生的IL應(yīng)該是相同的。如果編譯器無(wú)法創(chuàng)建該IL,因?yàn)樗鼰o(wú)法確定您打算使用哪種類型,那么您將得到一個(gè)編譯器錯(cuò)誤。

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


8年后更新

我需要更新這一點(diǎn),因?yàn)槲业睦斫庖呀?jīng)改變。我現(xiàn)在相信這是可能的var若要影響在方法返回接口的情況下的性能,但您應(yīng)該使用精確的類型。例如,如果您有此方法:

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

考慮這三行代碼來(lái)調(diào)用該方法:

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

這三個(gè)編譯和執(zhí)行都是預(yù)期的。但是,前兩行是完全相同,第三行將匹配第二行,而不是第一行。因?yàn)?的簽名Foo()是返回一個(gè)IList<int>,這就是編譯器將如何構(gòu)建bar3變量。

從性能的角度來(lái)看,大多數(shù)情況下你不會(huì)注意到。然而,在某些情況下第三行的性能可能不如第一行的速度快。..當(dāng)您繼續(xù)使用bar3變量時(shí),編譯器可能無(wú)法以相同的方式分派方法調(diào)用。

請(qǐng)注意,抖動(dòng)可能(可能甚至)能夠消除這種差異,但這并不一定。一般來(lái)說(shuō),你還是應(yīng)該考慮var在性能上是一個(gè)非因素。當(dāng)然一點(diǎn)也不像使用dynamic變量。但是說(shuō)它一點(diǎn)也不重要,這可能是夸大了它。


查看完整回答
反對(duì) 回復(fù) 2019-07-15
  • 3 回答
  • 0 關(guān)注
  • 1125 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)