.NET中是否存在垃圾收集的事件?

Vil*_*lx- 15 .net events garbage-collection

我的ASP.NET网站有一个奇怪的减速,我似乎无法追查.我怀疑GC可能会开始并停止我的线程.要确定每次GC确实发生时都要记录它会很好.

我可以制作一个虚拟对象并在其终结器中进行记录,但那将是一次性解决方案,而在我的情况下,有几个这样无法解释的暂停.

有任何想法吗?

补充:环境是VS2008/.NET 3.5 SP1.不,垃圾收集通知不会这样做,因为它们是一种轮询方法,并不适用于并发GC.

ang*_*son 9

这是一个简单的技巧.它可能不是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)

如果需要,可以通过使用静态布尔字段来添加对停止它的支持,以防止它在下次完成时重新启动.

希望这个对你有帮助.


Ode*_*ded 2

也许垃圾收集通知会有所帮助。

您会收到通知,即将进行完整的垃圾收集