代码之家  ›  专栏  ›  技术社区  ›  Steve

GC.收集C语言中的多线程技术#

  •  2
  • Steve  · 技术社区  · 15 年前

    我的应用程序调用GC.收集()在几个地方(是的,我知道我不应该手动调用这个方法,但请留下这一点,至少这个问题)。在我使用多线程实现之前,它工作得很好。GC.收集()在每个线程中被调用,因此它在多线程上下文中被调用。

    有人能解释为什么吗GC.收集()在使用高内存的计算机上的多线程上下文中调用会导致多线程问题吗?关于这个钻头有什么相关的理论吗?非常感谢你的回答。

    2 回复  |  直到 15 年前
        1
  •  11
  •   Kirk Woll    14 年前

    GC.Collect() 执行 将阻止所有线程的垃圾收集。它超载了 GC.Collect(int) 它允许您指定要收集的代。例如, GC.Collect(0) 只收集第一代。不确定这能解决你的问题,但值得一试。

        2
  •  1
  •   Community CDub    8 年前

    作为 Kirk 也就是说,集合暂停所有线程。这可能会导致垃圾收集过程中出现一些延迟。

    如果您在多核机器上运行应用程序,您可能希望尝试使用服务器GC,方法是确保应用程序配置包含:

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

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

    您可以尝试ServerGC—它也可以提供暂停,但是这些暂停可能更短/更少,并且可能提供更好的总体吞吐量。 您的里程数可能会有所不同。