【发布时间】:2013-05-16 17:40:23
【问题描述】:
大约四天来,我一直在收集托管应用程序的性能计数器。在此期间,发生了以下垃圾回收:
- 0 代:133,695
- 第一代:133,413
- 第二代:133,254
其中一些是使用GC.Collect() 的“诱导”完整集合。这四天有 323 人。
为什么我的所有(或基本上所有)收藏都是完整收藏?我猜这种情况会导致“% Time in GC”计数器非常高(超过 70%,即使分配的字节/秒显着下降)。
根据配置文件,注意我正在运行 .NET 4.0、64 位并使用服务器 GC,这可能很重要,也可能不重要。
【问题讨论】:
-
我认为,我们必须更多地了解您的应用程序才能做出猜测。
-
如果您调用 GC.Collect,您根本无法真正了解每个收集运行的频率;你在搞乱它想要做的事情。此外,GC 非常动态,因为它会在认为需要时运行集合,这意味着这将非常取决于您正在运行的代码以及您在什么范围内创建了多少内存,你坚持了多久,等等。
-
GC.Collect()对所有世代进行了完整的收集。这绝对是一个促成因素。如果删除显式集合,请测试数字如何变化。除此之外,如果不知道您的应用程序的详细信息,我们也无话可说。 -
@Joel:如果您想了解更多信息,我很乐意提供帮助。你想知道什么?
-
@Servy:我非常怀疑每 16 分钟通过
GC.Collect()收集一个完整的集合对系统的影响很大。我可以删除它并验证它,但我非常怀疑。
标签: c# .net garbage-collection