【问题标题】:.NET Garbage Collector in a separate Thread?.NET 垃圾收集器在一个单独的线程中?
【发布时间】:2015-09-17 20:20:20
【问题描述】:

是否可以在单独的线程中运行垃圾收集?这样就不会阻塞进程的主线程吗?

【问题讨论】:

  • 我不这么认为。你的具体问题是什么?我从来没有遇到过 GC 的性能问题
  • 我使用 Unity 3D 引擎,只是打开了一个空项目,让它在分析器中运行。即使在一个空项目中,每次进行完整的垃圾回收时,我都会获得巨大的性能峰值。
  • 它已经这样工作了,后台 GC 在另一个线程上运行。这就是为什么您会看到 8 毫秒的尖峰,而不是 200 多毫秒的尖峰。你真的需要停止尝试解决你没有的问题。或者解决不了。
  • 您可能应该阅读此内容,对吧? docs.unity3d.com/Manual/…
  • @Hans Passant 这是一个非常非常大的问题。实时应用程序的性能与其最高延迟峰值一样好。

标签: c# .net garbage


【解决方案1】:

后台 GC 已经发生在单独的线程上 - 这就是为什么它是“后台” - 但是有一部分 GC 生命周期必须阻塞进程中的所有线程(不仅仅是主线程)才能完成 - 这是不可避免的必要性MS 致力于最小化 - 您可以在代码中通过与自己的对象生命周期一样智能来促进它,使用备用列表而不是大量的新/处置等。

【讨论】:

    【解决方案2】:

    是的,但是有一些配置可以让您在后台自动运行它。

    请参阅Garbage Collection process 上的这篇文章。 https://msdn.microsoft.com/en-us/library/ee787088(v=vs.110).aspx

    【讨论】:

    • 谢谢!你有什么想法我可以在 Unity 中使用它吗?
    • 我没用过Unity,所以没有经验。我简要阅读了这篇文章,但似乎是 .NET 应用程序中的运行时配置文件对其进行了配置。所以也许这会指向正确的方向>您可以使用运行时配置架构的 元素
    猜你喜欢
    • 2011-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多