当垃圾回收器开始运行时,我该如何接收到信号?

3

我正在开发C# .NET脚本,想知道在方法执行期间是否调用了垃圾回收器,类似处理信号的方式?

我想要确保延迟时间是由GC引起的。


1
GC 在单独的线程上运行,线程编号为 2。 - Nick
你可能想要研究一下使用 GC.TryStartNoGCRegion - juharr
1个回答

3

当垃圾回收器(GC)正在运行时,所有线程都会暂停。因此,在GC运行时,您不能在托管代码中执行任何操作。

不过,有很多获取某种通知的选项。例如,您可以创建一个线程来执行以下操作:

var status = GC.WaitForFullGCApproach();

请注意,您还需要使用 GC.RegisterForFullGCNotification 才能使其正常工作。当然,这也会产生一定的性能损耗等。通常来说,调整GC工作方式并不是一个好主意。
如果您想在代码运行时查找是否有集合发生,您可以在运行前后使用GC.CollectionCount,并查看是否发生了变化。

你的程序可能会被冻结,但你仍然可以在几毫秒后接收到通知以记录。 - Blindy
@Blindy 是的,这就是为什么我展示了两种方法来做到这一点 :) - Luaan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接