Eri*_*bal 5 .net garbage-collection
我发现了一些很棒的文章(Maoni,Richter#1,Richter#2)给出了关于GC的理论和实践的许多细节,但我找不到任何说明如何设置GC线程优先级的内容.
我发现的最接近的是这个表明Finalizer线程"以异步方式运行到应用程序并且具有高优先级".
我一直以为它是一个"低优先级"的线程,但是阅读越来越多关于它似乎是错误的(因为GC必须阻止所有其他线程,并且你不希望你的应用程序依赖于一个低优先级的线程,以便及时恢复).
有谁知道确切知道实际的优先级应该是什么?
在CLR中通过C#,Richter解释说:
一个特殊的高优先级CLR线程专用于调用
Finalize
方法
(参见第20章"最终化内部"标题)
这是他讨论垃圾收集器线程的唯一上下文.在本章的前面,他解释说垃圾收集是为响应以下事件之一而启动的:
GC.Collect
...这表明垃圾收集器创建的唯一线程是这个单一的"高优先级"终结器线程.
编辑:然后他继续在"并发收集"中解释:
在运行工作站版本的执行引擎的多处理器系统上,垃圾收集器有一个额外的后台线程,用于在应用程序运行时同时收集对象.[...] 垃圾收集器具有标记无法访问的对象的普通优先级后台线程.
GC线程以正常优先级运行.终结器线程以"最高"优先级运行.
您可以通过打开Debug"Thread"窗口并打开托管应用程序中的任何位置来查看此信息.所有线程都列出(尽管它们没有命名),并列出了它们的优先级.解密哪个是必需的,但是会有一个额外的"Normal"和"Highest"优先级线程,它对应于GC和Finalizer线程.