有没有办法弄清楚垃圾收集器最后一次在我的程序中运行?假设我正在运行一个计算密集型程序,并对GC是否在中间运行感兴趣,我该怎么做?
提前致谢。
答案 0 :(得分:2)
您可以将记录代码添加到已收集的对象的终结器中 这只应用于诊断目的;除原生资源外,不应使用终结者。
您还可以查看GC performance counters;有关详细信息,请参阅here。
答案 1 :(得分:1)
尝试使用CLR Profiler
我将它用于.NET 3.5(应该适用于2.0-3.5)
http://msdn.microsoft.com/en-us/library/ff650691.aspx
对于.NET 4.0
答案 2 :(得分:0)
您可以使用Permon计数器,特别是.Net CLR Memory
- > % Time in GC
值:
%GC中的时间是自上一个GC循环以来执行垃圾收集(GC)所花费的时间百分比。此计数器通常表示垃圾收集器代表应用程序收集和压缩内存所做的工作。此计数器仅在每个GC结束时更新,计数器值反映最后观察到的值;这不是一般的。
它不完全是你所要求的,但它看起来是垃圾收集成本的合理指示。作为奖励,如果此计数器的值发生变化,则意味着至少发生了一个GC循环。