【问题标题】:Can I prevent garbage collector from stopping some of my threads?我可以阻止垃圾收集器停止我的一些线程吗?
【发布时间】:2010-09-21 21:24:36
【问题描述】:

是否可以在 Compact Framework 应用程序中阻止垃圾收集器无条件地停止至少一个线程,或者至少在代码的某些部分阻止 GC 收集?

我认为它必须处理设置实时优先级,但我发现很多建议不要这样做。

【问题讨论】:

    标签: multithreading garbage-collection compact-framework real-time


    【解决方案1】:

    GC 需要冻结所有线程才能检查所有对象。如果某个线程正在运行并且正在修改/创建对象,它如何完成它的工作?

    最好不要这样做。

    您可以做的就是在您进入不想被打断的状态之前调用 GC.Collect() 和 GC.WaitForPendingFinalizers()。这会给你一些时间。

    【讨论】:

      【解决方案2】:

      不允许非托管代码访问未固定的托管对象,但它会在垃圾回收期间运行而不会阻塞。如果您有某些例程必须在垃圾收集期间继续运行,并且它们不需要访问未固定的托管对象,您可以在非托管代码中编写这些例程并且 GC 不会影响它们。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-04
        • 1970-01-01
        • 2011-03-05
        • 2014-04-05
        • 2023-03-21
        • 1970-01-01
        • 2015-10-08
        • 2016-12-23
        相关资源
        最近更新 更多