2012-03-23 130 views
1

在.NET应用程序中很容易显示GC中的当前%,但是如何显示GC中的平均时间或GC中的事件总时间,以便您可以查看完整的方案并测量你真的改善了事情?GC中的平均时间

在GC

%的时间被定义为:

“在GC%时 显示的是花了自上次垃圾回收周期执行垃圾收集时间的百分比此计数器通常指示所做的工作垃圾收集器代表应用程序收集和压缩内存,该计数器仅在每次垃圾收集结束时更新,该计数器不是一个平均值,其值反映了最后一次观察值。

回答

2

GC是非确定性的。因此很难优化,因为根据应用程序运行的时间长短以及每代的大小,你会得到不同的结果。

更简单的方法 - 说实话更加可靠 - 就是计算您在特定方法中创建的对象的数量。诸如不在循环中创建对象等最佳实践将有所帮助。

+1

同意,唯一明智的选择是减少“垃圾”收集。 – 2012-03-23 16:34:23

1

某些版本的Visual Studio具有内置的分析器。还有第三方分析器,免费和花钱的。 Profiler可以显示您在GC中花费的时间百分比。

编辑大约有任何旧线花,包括GC线程的CPU时间一些常见的误解。例如,可以针对GC线程使用的同步对象进行锁定。在这种情况下,GC将处于待命状态,但不会产生可测量的CPU时间。如果没有适当的工具,这些情况很难检查。

+0

其实我需要总时间。 Process Explorer在GC中显示%时间,而不是总时间:( – pablo 2012-03-23 16:55:53

+0

@pablo请看看我的编辑。您可能会注意到VS Profiler比直接使用Windows API更令人愉快。 – GregC 2012-03-23 18:22:31