我目前正在使用 dotTrace Timeline 分析我的应用程序。我发现很多时间都花在了 GC 上,这是意料之中的,但出乎意料的是,在后台收集期间,我看到很多时间用户线程被挂起。
探查器截图:
从图像中我看到我有两个线程在做一些 CPU 绑定的工作,然后发生“后台”GC,第一个线程稍后暂停,第二个线程立即暂停。
您可以看到用户线程确实被垃圾收集器线程阻塞。
我知道在后台 GC 期间可能会有 Gen 0 和 Gen 1 的前台阻塞 GC。但情况并非如此,因为所有 GC 都在 Gen 2 上。
我在 github 上创建了基本的复制解决方案: https ://github.com/isaevdan/BackgroundGCSuspendsThreads