首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >你能重现这个64位的.NET 4GC错误吗?

你能重现这个64位的.NET 4GC错误吗?
EN

Stack Overflow用户
提问于 2010-10-19 17:57:51
回答 2查看 1.7K关注 0票数 17

更新:微软现在已经复制了这个错误,并正在努力修复。

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

在我们的三台机器上,下面这个简单的C#程序会导致GC泄漏内存,直到一个巨大的GC周期启动,使程序停顿几分钟(!)同时回收了11 is的堆:

代码语言:javascript
复制
    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显露出来所需的确切条件。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3967176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档