c#垃圾回收开始/结束回调



我只是想知道在。net运行时/c#中是否有一个可重写的垃圾收集器开始/结束的回调。我还将声明,我没有试图控制GC的意图,我只是好奇。

如果不是,复制这种行为的最好方法是什么?

你不能在托管代码中直接获得通知,因为托管代码在GC期间被挂起(或者至少不能保证在后台GC的情况下运行你的线程)。

选项:

  • 您可以使用GC获得近似通知。RegisterForFullGCNotification中所示垃圾回收通知文章。

  • 如果需要大概的时间,可以查看与GC相关的性能计数器

  • 您还可以捕获ETW事件来分析离线行为-垃圾收集ETW事件。有很多关于如何做到这一点的链接- Windows性能工具包和SO问题,如使用"Windows事件跟踪";事件。

  • 如果真的有必要,你可以自己托管CLR,然后你会收到有关GC的通知-参见CLR独立出来:托管CLR和CLR托管-第3部分。托管CLR时捕获GC开始/结束的最终方法- IHostGCManager::SuspensionStarting。

最新更新