在.NET应用程序中很容易显示GC中的当前%,但是如何显示GC中的平均时间或GC中的事件总时间,以便您可以查看完整的方案并测量你真的改善了事情?GC中的平均时间
在GC%的时间被定义为:
“在GC%时 显示的是花了自上次垃圾回收周期执行垃圾收集时间的百分比此计数器通常指示所做的工作垃圾收集器代表应用程序收集和压缩内存,该计数器仅在每次垃圾收集结束时更新,该计数器不是一个平均值,其值反映了最后一次观察值。
在.NET应用程序中很容易显示GC中的当前%,但是如何显示GC中的平均时间或GC中的事件总时间,以便您可以查看完整的方案并测量你真的改善了事情?GC中的平均时间
在GC%的时间被定义为:
“在GC%时 显示的是花了自上次垃圾回收周期执行垃圾收集时间的百分比此计数器通常指示所做的工作垃圾收集器代表应用程序收集和压缩内存,该计数器仅在每次垃圾收集结束时更新,该计数器不是一个平均值,其值反映了最后一次观察值。
如果您有兴趣测量在GC中花费的时间,可以通过ETW获取该数据。 PerfMonitor将为您收集并显示该数据 - 请查看此MSDN Magazine文章以获取简介:http://msdn.microsoft.com/en-us/magazine/gg490356.aspx。
GC是非确定性的。因此很难优化,因为根据应用程序运行的时间长短以及每代的大小,你会得到不同的结果。
更简单的方法 - 说实话更加可靠 - 就是计算您在特定方法中创建的对象的数量。诸如不在循环中创建对象等最佳实践将有所帮助。
某些版本的Visual Studio具有内置的分析器。还有第三方分析器,免费和花钱的。 Profiler可以显示您在GC中花费的时间百分比。
编辑大约有任何旧线花,包括GC线程的CPU时间一些常见的误解。例如,可以针对GC线程使用的同步对象进行锁定。在这种情况下,GC将处于待命状态,但不会产生可测量的CPU时间。如果没有适当的工具,这些情况很难检查。
同意,唯一明智的选择是减少“垃圾”收集。 – 2012-03-23 16:34:23