[英].NET Memory Consumption Question
這兩種方法中的任何一種是否使用的內存都比其他方法要大,或者會給GC帶來更大的負擔?
選項1
LargeObject GetObject()
{
return new LargeObject();
}
選項#2
LargeObject GetObject()
{
LargeObject result = new LargeObject();
return result;
}
兩種方法的堆內存使用情況相等。 在第二種情況下,創建局部變量的開銷很小,但是它不會打擾您。 變量將存儲在堆棧中,不會對GC造成任何額外壓力。 同樣,此附加變量可能由編譯器或JIT優化(因此它可能不存在於CLR實際執行的代碼中)。
編譯器將生成與您的代碼版本2等效的IL,需要一個虛擬堆棧位置來存儲對象引用。 JIT優化器將生成與您的代碼版本1等效的機器代碼,引用存儲在CPU寄存器中。
換句話說,沒關系。 您在運行時會獲得完全相同的機器代碼。
您可以查看生成的IL(使用反射器),看看它是否完全不同。 根據編譯優化設置,#2可能會在堆棧上存儲一個額外的值(作為result
值),但這只會額外增加4或8個字節(如果它是一個類,應該是!),並且會完全不影響GC。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.