我有一段糟糕的時間,C#沒有釋放內存,因爲我沒有再引用它,因此我在內存中保留了一個大的結構。C#GC沒有釋放內存
我已經在下面列出了一些代碼,展示了一個類似的問題,我有一個。我想我一定是誤解了一些GC,因爲我不確定爲什麼下面的代碼會拋出一個內存異常。
有誰知道我爲什麼包含的代碼會導致內存不足?沒有任何名單正在舉行,他們立即可以清理。
感謝,
保羅
攝製:全新的4.5控制檯應用程序,將代碼粘貼到主。
異常將在for循環的第一次迭代中拋出在第三個「新列表」上。如果省略for循環,則不會出現OOM。
for (var i = 0; i < 100; i++)
{
new List<int>(100 * 1000 * 1000);
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
new List<int>(100 * 1000 * 1000);
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
new List<int>(100 * 1000 * 1000);
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
new List<int>(100 * 1000 * 1000);
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced, blocking: true);
}
在你的真實程序中,你使用GC嗎?你應該嘗試讓程序儘可能地做自己的gc – Sayse
這裏只是我的看法,但是如果你需要做大量細粒度的內存管理和GC,C#可能不適合這項工作。類似於C/C++可能更適合。 – Gray
以下哪一行會引發異常?第一個還是另一個? –