c#垃圾回收开始/结束回调
本文关键字:结束 回调 开始 | 更新日期: 2023-09-27 17:50:38
我只是想知道在。net运行时/c#中是否有一个可重写的垃圾收集器开始/结束的回调。我还将声明,我没有试图控制GC的意图,我只是好奇。
如果不是,复制这种行为的最好方法是什么?
你不能在托管代码中直接获得通知,因为托管代码在GC期间被挂起(或者至少不能保证在后台GC的情况下运行你的线程)。
选项:
-
您可以使用GC获得近似通知。RegisterForFullGCNotification中所示垃圾回收通知文章。
-
如果需要大概的时间,可以查看与GC相关的性能计数器
-
您还可以捕获ETW事件来分析离线行为-垃圾收集ETW事件。有很多关于如何做到这一点的链接- Windows性能工具包和SO问题,如使用"Windows事件跟踪";事件。
-
如果真的有必要,你可以自己托管CLR,然后你会收到有关GC的通知-参见CLR独立出来:托管CLR和CLR托管-第3部分。托管CLR时捕获GC开始/结束的最终方法- IHostGCManager::SuspensionStarting。