C#多线程进程中线程的局部堆

时间:2013-06-14 22:21:01

标签: c# multithreading heap

我在C#中有一个多线程进程,每个线程经常尝试从堆中分配内存。这需要多个堆锁,因此降低了线程的优势。

是否存在类似线程的本地堆,因此同时尝试从不同线程分配内存不会锁定其中一个?

1 个答案:

答案 0 :(得分:5)

根据this article,当多个线程同时分配内存时,多处理器系统中没有争用:

  

无同步分配在多处理器系统上,   托管堆的第0代被拆分为多个内存竞技场   每个线程使用一个竞技场。这允许多个线程   同时分配,以便不对堆进行独占访问   必需的。

编辑:Hans Passant已正确指出,为了应用此行为,必须在工作站环境中将垃圾收集器强制为gcServer模式。 这可以通过编辑app.configweb.config文件来完成,并确保定义了以下设置:

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