我在使用C#时遇到了一个糟糕的问题,即在我不再引用大型结构体时,C#不能释放其占用的内存。下面的代码展示了类似于我的问题,但我认为我对GC的理解可能有误,因为我不确定为什么以下代码会抛出内存不足异常。有人知道为什么我包含的代码会出现内存不足的情况吗?这些列表中没有一个被保留,它们应该能够立即清除。谢谢!重现:创建一个全新的4.5控制台应用程序,将代码粘贴到Main中。抛出异常将在for循环的第三个"new List"上发生,在省略for循环的情况下,将不会发生内存不足的情况。
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);
}