在GC启动时触发一个事件



c#中的一个小问题,是否有可能在垃圾收集器开始工作时触发事件?

如果是,如何处理?

想象一下下面的代码:

while(True){
if (Gc.IsWorking())
{
// some code
}
}

在单独的线程上运行,并检测gc何时工作。我知道,当gc触发整个应用程序将暂停,但我们可以如何禁用它的某些部分的代码,如使用不安全的这样我们就可以让线程工作了?

有GC。可以暂停GC的trystartnogcreregion。但这是针对非常特殊的场景,您需要非常低且可预测的延迟。我认为这样做的目的是拥有一组旋转的活动节点,并在节点离线旋转时执行任何GC。

也可以使用本机代码。我不希望GC知道或关心本机线程。

但这两种解决方案都不应该在任何常见场景中使用。优化您的分配模式可能足以满足99%的用例。