相关疑难解决方法(0)

你能否重现这个64位.NET 4 GC错误?

更新:微软现在已经复制了这个bug并正在修复.

在评估.NET平台的低延迟软件开发的可行性的同时,我们发现了.NET 4并发工作站垃圾收集器中的一个严重错误,它可能导致应用程序一次挂起几分钟.

在我们的三台机器上,以下简单的C#程序导致GC泄漏内存,直到没有剩余并且单个庞大的GC循环启动,使程序停止几分钟(!),同时回收11Gb堆:

    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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

您需要在使用.NET 4的64位Windows操作系统上编译x64,并使用默认(交互式)延迟设置运行默认(并发工作站)GC.

以下是在此计算机上运行此程序时任务管理器的外观:

替代文字

请注意,当此程序需要不超过100Mb的内存时,此处已泄漏了11Gb的堆.

我们现在已经积累了大约十二个这个bug的重复,用F#和C#编写,当大多数gen0存活时,它似乎与GC写入障碍中的一个错误有关.但是,微软还没有能够重现它.你能?如果是这样,您能否尽可能准确地描述您的设置,以便我们可以尝试精确缩小此错误所需的条件.

.net garbage-collection

16
推荐指数
1
解决办法
1621
查看次数

如何配置.net垃圾收集器?

我想知道如何描述垃圾收集器的性能并监视三代.我想知道是否有可能在任何时间知道当前生活的物体是什么gen0,gen1,gen2.

.net garbage-collection

4
推荐指数
1
解决办法
1712
查看次数

标签 统计

.net ×2

garbage-collection ×2