当前位置:  开发笔记 > 编程语言 > 正文

GC.Collect循环?

如何解决《GC.Collect循环?》经验,为你挑选了3个好方法。

我使用Reflector在System.Web.ISAPIRuntime中找到了这段代码

public void DoGCCollect()
{
    for (int i = 10; i > 0; i--)
    {
        GC.Collect();
    }
}

任何人都可以评论这个吗?是否有理由在循环中执行GC.Collect()?为什么10次而不是3次,5次或20次?分析表明它没有在.net框架内部使用,但它是公共的,所以我想IIS可以调用它...

编辑:

仅仅是为了澄清目的:我从未打电话给GC.Collect,我无意使用它.我知道在大多数(如果不是全部)案例中这是一个坏主意.问题是.net框架为什么会这样做.谢谢你的所有答案.



1> Jon Skeet..:

是的,那太可怕了.首先,你根本不需要这样做.但是,如果你真的想尽可能地强制垃圾收集,并等待它完成,你应该使用:

GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
GC.WaitForPendingFinalizers();
// Collect anything that's just been finalized
GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);

真的不是一个好主意.


@PraveenKumar:完全调用`GC.Collect`很少是解决`OutOfMemoryException`的正确方法 - 很可能你只是坚持你不应该的引用.使用分析器找出什么.

2> Grzenio..:

看起来真的很可怕:)



3> jalf..:

我不认为你会得到一个更好的解释,"微软的程序员之一是非常无能为力的,显然,在签入之前没有其他人费心去查看他的代码".;)

虽然看起来确实很吓人.

这是对你不理解的bug的一个相当普遍的回应.无论出于何种原因,你试图调用GC,不知怎的,调用它似乎并没有解决你的问题(也许真正的问题只是你应该等待终结器线程或其他东西),所以天真的解决方案是显然"嗯,我会继续称它为".

类似于在打印文档之前反复按"打印".

也许您应该将它提交给thedailywtf.com.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有