Mar*_*ark 2 .net c# garbage-collection
我在大约四天内一直在为托管应用程序收集性能计数器.在此期间,出现了以下垃圾收集:
其中一些是使用"诱导"的完整集合GC.Collect().四天内共有323人.
为什么我的所有(或基本上所有)收藏品都是完整的收藏?我猜这种情况导致非常高的"GC时间"计数器(超过70%,即使分配的字节数/秒显着下降).
根据配置文件,我正在运行.NET 4.0,64位,并使用服务器GC,这可能是也可能不重要.
我正在分配大量内存(有时超过300 MB /秒)
这足以解释你观察到的内容.这将在第二天触发大量的集合,第0代和第1代堆不是那么大.这些世代中的对象很可能仍在使用中,因为它们刚被分配,因此第0代和第1代集合没有足够的空间,几乎每个对象都被提升为第2代.GC有一个对策,它会自动增加发电量.但这无法跟上你对记忆的贪婪饥渴.您可以使用Perfmon.exe中的.NET内存性能计数器来观察此情况.任何.NET内存分析器都可以为您提供更好的图表.
以如此高的速率分配内存并不容易,你必须分配大量的数组.这本身就可以解释它,大对象堆中分配了大于85,000字节的数组.寻找重用这些数组的方法.几乎所有.NET集合类都使用数组.