.NET 垃圾收集器 - 它的线程优先级是什么?

2023-11-22

我发现了一些很棒的文章(Maoni, 里克特 #1, 里氏#2)给出了关于 GC 的理论和实践的许多细节,但我找不到任何说明 GC 的线程优先级是如何设置的。

我发现的最接近的是这个,它指出 Finalizer 线程“以高优先级与应用程序异步运行。”

我一直认为这是一个“低优先级”线程,但是阅读越来越多的关于它的信息似乎是错误的(因为 GC 必须阻止所有其他线程,并且您不希望您的应用程序依赖于低优先级线程以便及时恢复)。

有人确切知道实际的优先级应该是什么吗?


In 通过 C# 进行 CLR,里克特解释说:

一个特殊的高优先级 CLR 线程专门用于调用Finalize methods

(参见第 20 章的“最终确定内部结构”标题)

这是他谈论垃圾收集器线程的唯一上下文。在本章前面,他解释了垃圾收集是为了响应以下事件之一而启动的:

  • 0代已满
  • Call to GC.Collect
  • Windows 报告内存不足的情况
  • CLR 正在卸载 AppDomain
  • CLR 正在关闭

...这表明垃圾收集器创建的唯一线程是这个单一的“高优先级”终结器线程。

Edit:然后,他在“并发收藏”中继续解释说:

在运行工作站版本执行引擎的多处理器系统上,垃圾收集器有一个额外的后台线程,用于在应用程序运行时同时收集对象。 [...]垃圾收集器有一个正常优先级的后台线程来标记无法访问的对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 垃圾收集器 - 它的线程优先级是什么? 的相关文章

  • PayPal日期时间(付款日期)解析问题

    PayPal 发送付款datetime like 09 3A37 3A22 11 月 18 2C 2012 太平洋标准时间 我尝试通过此代码转换它 但出现异常 有关如何解析它的任何线索吗 谢谢你 DateTime paymentDate D
  • 如何避免由于 DI 容器绑定要求而导致 BAL 依赖于 DAL?

    我的应用程序由三个项目组成 核心 DAL 和 BAL 核心包含域对象 客户 订单 产品 它还包含基本的 IRepository 接口 IRepository
  • C# WPF 中的内存泄漏

    在处理所有使用过的对象后 我需要减少 c WPF 中的内存泄漏 但我无法通过使用以下代码片段完全减少内存消耗 这是我的代码 string str Uri uri private void Button Click object sender
  • C# 字符串前的“@”[重复]

    这个问题在这里已经有答案了 可能的重复 NET 字符串前面的 是什么 https stackoverflow com questions 556133 whats the in front of a string for net 我在一本C
  • 从 SQL XML 列中的元素获取属性名称

    对于此 xml 在 SQL 2005 XML 列中
  • 在wince上用c#静默运行命令行程序

    我再次需要一些帮助 我使用 net Compact Framework 和编程语言 C 来为运行 WinCE 5 0 的移动设备进行开发 我想要完成的是以编程方式安装网络驱动器 为此 应用程序在后台线程中运行以下代码 ProcessStar
  • 在 Windows XP 中,SqlCe 在受限用户帐户下打开缓慢

    我有一个使用 NET 4 0 构建的 Windows 应用程序 它的program files目录下有一个SqlCe数据库 C Program Files 公司名称 应用程序名称 Data Data sdf 该应用程序与 Inno Setu
  • 具有完整框架的 ASP NET Core 2

    我无法找到在完整框架下运行的 ASP NET MVC Core 应用程序的任何文档或示例 它应该受到支持 但正如我所说 我找不到任何有关如何为此配置项目的文档 并且自己无法解决它 有谁能做到这一点并且可以提供有关需要做什么的建议 样本吗 我
  • 是否有 Visual Studio 宏的 API 样式参考

    我想使用 Visual Studio 宏自动执行一些常见任务 但我找不到可通过宏访问的 Visual Studio 对象的合适 API 参考 这样的想法存在吗 或者有什么方法可以通过 API 找到我需要的东西 你的意思是DTE http m
  • C# 通过实体框架调用 SQL Server 用户定义的函数

    我不敢相信我必须问这个问题 但我被困住了 我花了三个小时试图解决这个问题 但我被困住了 我可以在以前版本的 C 中执行此操作 但我卡住了 在继续之前 我正在研究堆栈 视觉工作室2012 SQL Server 2012 NET Framewo
  • 从字符串数组中删除项目

    我有一个包含如下数据的数据库字段 76 60 12 例如 如果我想删除60 我该怎么办 要删除的号码可以是任何地方 如果需要的话 我还需要删除逗号 我正在使用 NET 2 0 我会用逗号分割字符串 删除元素 然后再次连接字符串 希望这一切都
  • 有没有办法根据值是大于 0.5 还是小于 0.5 来进行下限/上限?

    我正在尝试舍入我的价值观 以便如果它是0 5或更大 则变为1 否则就变成0 例如 3 7 gt 4 1 3 gt 1 2 5 gt 3 有任何想法吗 Math Round 3 7 MidpointRounding AwayFromZero
  • 如何使 MSBuild 在引用的项目中正确跟踪使用外部工具生成的文件?

    我有 MSBuild 代码 它使用特定的构建操作来获取文件 CompileFoo在此示例中 并生成输出文件 具有不同的扩展名 这是我到目前为止的代码
  • 如何检查DLL文件是否已注册?

    如何以编程方式查找用 C 编写的 DLL 文件是否已注册 我已经尝试过这段代码 但它没有成功 如果我注册一个 DLL 文件并使用此代码进行检查 它将返回 如果我取消注册它并运行同一段代码 它会再次返回 true 我将 DLL 文件的完整路径
  • 使用按钮在 aspx.cs 上调用 JavaScript 函数(以 aspx 形式)

    我有这个aspx div div
  • 本机 C++ 和 C# 互操作

    因此 我正在构建一个必须使用 C 工作的应用程序 但 MFC ATL 太混乱了 不符合我的喜好 所以我有了一个绝妙的主意 即用本机 C 编写所有 思考 代码 并用 C 编写所有漂亮的 UI 代码 但问题是两者之间的互操作性 在我对此过于着迷
  • .NET ListView列顺序问题

    我在表单中遇到问题 我已按以下顺序将列添加到 NET ListView 控件 A B C D A D 列的显示索引按顺序为 0 3 但它们的显示顺序错误 A B D C these are switched at runtime 注意 一切
  • 设置外部应用程序焦点

    在 VB NET 中 您可以使用以下命令将焦点设置到外部应用程序 AppActivate Windows Name or AppActivate processID As Integer 现在 如果您这样做 则效果很好 Dim intNot
  • 锁定文件的一个块

    我有一个大小为 192k 的文件 我想锁定文件的中间部分 例如 我想用 c 锁定文件的 64k 128k 知道如何锁定文件的那部分吗 你需要使用锁定文件Ex http msdn microsoft com en us library win
  • 为什么 32 位 .NET 进程的引用类型的最小大小为 12 字节

    我正在读专业 Net 性能 https rads stackoverflow com amzn click com 1430244585本书有关参考类型内部结构的部分 它提到 对于 32 位 net 进程 引用类型具有 4 字节的对象头和

随机推荐