簡體   English   中英

C#垃圾收集收集

[英]C# Garbage Collection Collect

所以我在玩C#垃圾收集,發現了一件很奇怪的事情。

Random r = new Random();
byte inl = 0;
while(true)
{
    inl = (byte)r.Next(0, 255);
    Console.WriteLine(inl);
    GC.Collect(0, GCCollectionMode.Forced, false, false);
}

我在主循環中有此代碼。 如果沒有GC.Collect函數,則程序運行時的RAM大約為10MB。 但是使用GC.Collect函數,它可以在6MB的RAM上運行。

然后我的問題來了,為什么GC在將變量寫入控制台后沒有自動刪除該變量?

有不同的方法可以清除不同語言/框架中未使用的內存。

在C ++領域中,您有(例如)引用計數的智能指針,當它們的計數達到零時,它們會自動對其指針調用delete。 如果這是您在.NET世界中所期望的行為,您將感到失望! :)

.NET GC模型非常不同。 為了使您不必擔心手動管理內存,CLR會跟蹤正在使用的引用,並根據需要清理內存。 但是,監視和檢查正在使用哪些引用是相對昂貴的過程。 因此,垃圾收集器不會連續運行。 例如,在存在內存壓力時(以及在其他情況下,但這當然是一種簡化)。

簡短的答案基本上是:讓垃圾收集器完成工作。 這是一個非常智能且高度優化的系統,您幾乎不需要(如果有的話)自己手動觸發垃圾收集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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