Vil*_*lx- 15 .net events garbage-collection
我的ASP.NET网站有一个奇怪的减速,我似乎无法追查.我怀疑GC可能会开始并停止我的线程.要确定每次GC确实发生时都要记录它会很好.
我可以制作一个虚拟对象并在其终结器中进行记录,但那将是一次性解决方案,而在我的情况下,有几个这样无法解释的暂停.
有任何想法吗?
补充:环境是VS2008/.NET 3.5 SP1.不,垃圾收集通知不会这样做,因为它们是一种轮询方法,并不适用于并发GC.
这是一个简单的技巧.它可能不是100%准确,但它可能已经足够好了.
如果你可以接受最终确定的通知,那么你可以使用一种简单的方法.
创建一个对象,不要保留对它的引用.完成对象后,引发事件,然后构造另一个对象.您也不会保留对此对象的引用,但它将一直存在,直到下次执行完整的集合.
这是一个这样的对象:
public class GCNotifier
{
public static event EventHandler GarbageCollected;
~GCNotifier()
{
if (Environment.HasShutdownStarted)
return;
if (AppDomain.CurrentDomain.IsFinalizingForUnload())
return;
new GCNotifier();
if (GarbageCollected != null)
GarbageCollected(null, EventArgs.Empty);
}
public void Start()
{
new GCNotifier();
}
}
Run Code Online (Sandbox Code Playgroud)
如果需要,可以通过使用静态布尔字段来添加对停止它的支持,以防止它在下次完成时重新启动.
希望这个对你有帮助.