c# - 垃圾收集器是否在单独的进程中运行?

标签 c# .net garbage-collection

垃圾收集器是否在单独的进程中启动?

例如:

  1. 如果我们尝试测量某段代码所花费的进程时间,并且在此期间垃圾收集器开始收集,它会在新进程上还是在同一进程中启动?

  2. 是不是像下面这样工作?

    //Code (Process 1)
    --> Garbage Collector Run (Process 1)
    //Code (Process 1)
    

    还是这样?

    //Code (Process 1)
    --> Garbage Collector Run (Process 2)
    //Code (Process 1)
    

最佳答案

垃圾收集器在同一个进程上运行触发垃圾收集的线程。它停止所有当前线程,并自行执行。它肯定不会启动另一个进程,您会在 Windows 中看到它。

来自 MSDN :

Before a garbage collection starts, all managed threads are suspended except for the thread that triggered the garbage collection.

(这仅适用于工作站,正如 DrKoch 所指出的)。服务器有一个后台线程运行以进行垃圾收集。

如果您在引用文档中搜索“并发垃圾回收”,您将找到文本“GC 线程”,它支持这一点。

如果需要,您可以强制在单独的线程中运行垃圾回收。将其放入您的 app.config:

<configuration>
   <runtime>
      <gcServer enabled="true"/>
   </runtime>
</configuration>

(来自 this answer)

另请阅读 The .NET Framework 4.5 includes new garbage collector enhancements for client and server apps , 正如 Adam Houldsworth 所建议的那样,关于自 .NET 4.5 以来垃圾收集器工作方式的变化。

关于c# - 垃圾收集器是否在单独的进程中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29208284/

相关文章:

c# - 运行时本地化

c# - 仅在 3.5 中从 List<T> 到 IEnumerable<T> 的 InvalidCastException

c++ - 了解 C++ 中的零和 NULL

c# - 在 c# 中构建一个整数数组,每个调用 c++ 或在 c++ 中构建并传递给 c#?

c# - iOS 中的游戏中心 : GKScore vs. GKachievement?

c# - SQL Server Compact Edition-字节数组截断到长度为 8000 异常

c# - 在服务器上: Getting IP Address of Connected Clients

c# - 有没有办法确定作为应用程序运行的站点的根

java - java字符串文字可以被垃圾收集吗?如果是,如何证明?

java - GC 如何挂起/阻塞应用程序线程