簡體   English   中英

.NET內存消耗問題

[英].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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM