更新:微软现在已经复制了这个错误,并正在努力修复。
在评估.NET平台用于低延迟软件开发的可行性时,我们在.NET 4并发工作站垃圾收集器中发现了一个严重的错误,该错误可导致应用程序一次挂起长达几分钟。
在我们的三台机器上,下面这个简单的C#程序会导致GC泄漏内存,直到一个巨大的GC周期启动,使程序停顿几分钟(!)同时回收了11 is的堆:
static void Main(string[] args)
{
var q = new System.Collections.Generic.Queue<System.Object>();
while (true)
{
q.Enqueue(0);
if (q.Count > 1000000)
q.Dequeue();
}
}
您需要在装有.NET 4的64位Windows上为x64编译,并使用默认(交互式)延迟设置在默认(并发工作站) GC下运行。
下面是在此计算机上运行此程序时任务管理器的外观:
请注意,当此程序需要的内存不超过100Mb时,这里已经泄漏了11 no的堆。
我们现在已经积累了大约12个关于这个bug的报告,都是用F#和C#编写的,它似乎与大多数gen0幸存下来时GC写屏障中的一个bug有关。然而,微软还没有能够复制它。你能?如果是这样的话,请您尽可能准确地描述您的设置,以便我们可以尝试缩小这个bug显露出来所需的确切条件。
https://stackoverflow.com/questions/3967176
复制相似问题