当前位置: 首页 > 编程语言 > C#

GC.Collect循环?分享

时间:2023-04-10 20:01:00 C#

GC.Collect循环?我使用Reflector在System.Web.ISAPIRuntime中找到了这段代码publicvoidDoGCCollect(){for(inti=10;i>0;i--){GC.Collect();任何人都可以评论这个吗?是否有理由在循环中执行GC.Collect()?为什么是10次而不是3、5或20次?分析表明它没有在.net框架内使用,但它是公开的,所以我想IIS可以调用它...编辑:只是为了澄清:我从未调用过GC.Collect,我无意使用它。我知道在大多数(如果不是全部)情况下这是个坏主意。问题是.net框架为什么要这样做。谢谢你所有的回答。我认为您不会对“Microsoft的一位程序员非常无能,显然没有人在签入之前费心查看他的代码”得到更好的解释。;)虽然它看起来确实很吓人。这是对您不理解的错误的一种相当常见的反应。无论出于何种原因,您正在尝试调用GC,并且以某种方式调用它似乎并不能解决您的问题(也许真正的问题只是您应该等待终结器线程或其他东西),所以天真的解决方案是显然“好吧,我会继续称呼它”。类似于在打印文档之前反复按“打印”。也许您应该将它提交给thedailywtf.com。是的,那太可怕了。首先,您根本不需要这样做。但是,如果你真的想尽可能地强制垃圾收集,并等待它完成,你应该使用:GC.Collect(GC.MaxGeneration,GCCollectionMode.Forced);GC.WaitForPendingFinalizers();//收集刚刚完成的所有内容GC.Collect(GC.MaxGeneration,GCCollectionMode.Forced);这真的不是一个好主意。看起来真的很可怕:)我真的很喜欢这个方法的Mono实现:publicvoidDoGCCollect(){//什么都不做。可能开发人员打算写类似的东西,这只是一个错字。看起来有世界末日情结的人写了它的内涵,他们将在10秒计时器上结束世界......微软不应该指出这样的事情吗?将此张贴在Connect站点上有任何用处吗?这不是一个好主意,因为您真的应该相信垃圾收集器会完成它的工作,而无需从您的代码中专门调用它。99.9%的时间你永远不需要从你的代码中调用GC。首先,调用GC.Collect()不是一个好主意。多次调用效果不大。但是,您有时会看到调用Collect()、然后调用WaitForPendingFinalizers()、然后再次调用Collect()的模式。这背后的想法是确保具有终结器的实例也被回收,因为它们将在第一次收集后存活下来。请记住,这会导致应用程序延迟,而且很少需要这样做。以上就是C#学习教程:GC.Collect循环?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: