我可以阻止垃圾收集器阻止我的一些线程吗?

时间:2008-11-11 22:14:31

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

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

我认为它必须处理设置实时优先级,但我发现了许多反对这样做的建议。

2 个答案:

答案 0 :(得分:3)

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

最好不要这样做。

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

答案 1 :(得分:0)

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