C# 垃圾收集器 Begin/End 回调
C# Garbage Collector Begin/End Callback
我只是想知道 .NET runtime/C# 中是否有垃圾收集器 begin/end 的可覆盖回调。我还要声明,我无意试图控制 GC,我只是好奇。
如果不是,复制此行为的最佳方法是什么?
您无法直接在托管代码中获得通知,因为托管代码在 GC 期间被暂停(或者至少不保证 运行 在 background GC 的情况下您的线程)。
选项:
您可以使用 GC.RegisterForFullGCNotification 获得大概的通知,如下所示
Garbage Collection Notifications 条。
需要大概时间的可以查看GC相关的性能计数器
您还可以捕获 ETW 事件以离线分析行为 - Garbage Collection ETW Events. There are many links on how to do that - Windows Performance Toolkit and SO questions like Consuming "Event Tracing for Windows" events.
如果确实有必要,您可以自己托管 CLR,然后您会收到有关 GC 的通知 - 请参阅 CLR Indie Out:Hosting CLR and CLR Hosting - part 3. The ultimate method you want when hosting CLR to capture start/end of GC - IHostGCManager::SuspensionStarting。
我只是想知道 .NET runtime/C# 中是否有垃圾收集器 begin/end 的可覆盖回调。我还要声明,我无意试图控制 GC,我只是好奇。
如果不是,复制此行为的最佳方法是什么?
您无法直接在托管代码中获得通知,因为托管代码在 GC 期间被暂停(或者至少不保证 运行 在 background GC 的情况下您的线程)。
选项:
您可以使用 GC.RegisterForFullGCNotification 获得大概的通知,如下所示 Garbage Collection Notifications 条。
需要大概时间的可以查看GC相关的性能计数器
您还可以捕获 ETW 事件以离线分析行为 - Garbage Collection ETW Events. There are many links on how to do that - Windows Performance Toolkit and SO questions like Consuming "Event Tracing for Windows" events.
如果确实有必要,您可以自己托管 CLR,然后您会收到有关 GC 的通知 - 请参阅 CLR Indie Out:Hosting CLR and CLR Hosting - part 3. The ultimate method you want when hosting CLR to capture start/end of GC - IHostGCManager::SuspensionStarting。