在垃圾收集发生时是否有任何事件告诉应用程序?

Pho*_*bis 4 c# events garbage-collection

我试图找到一种了解垃圾收集的方法.当它已经开始,完成或正在进行时.我真的只需要一些事件连接到集合本身(我想).

我的问题是我有一个WeakEventManager(从头开始编写),我有清除方法,删除和WeakReferences不再存在(WeakReferences在字典中).

问题是我必须知道何时"清理".当收集器正在做它的事情时清理它会很好.即使它是在垃圾收集之后,至少下一个集合将删除这些旧对象.

Ric*_*ard 7

您可以监视.NET内存性能计数器对象.对于0,1和2集合的数量有计数.

通常在基于GC的系统上,直接引用GC是一种反模式.当您尝试使用已清除的WeakReference时,您可能(给出有限的描述)只是懒得清理.


Cra*_*gTP 7

System.GC类提供了一个RegisterForFullGCNotification方法,该方法将允许在垃圾收集即将完成时以及何时完成时引发通知.

这并不理想,因为使用此方法有一些注意事项,例如必须禁用并发垃圾收集才能使此方法起作用.

有关完整信息,请参阅以下链接:

垃圾收集通知

GC.RegisterForFullGCNotification方法