3

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

是否有类似线程的本地堆的东西,以便同时尝试从不同线程分配内存不会锁定其中一个?

4

1 回答 1

5

根据这篇文章,当多个线程同时分配内存时,多处理器系统中不存在争用:

无同步分配 在多处理器系统上,托管堆的第 0 代被分成多个内存区域,每个线程使用一个区域。这允许多个线程同时进行分配,因此不需要对堆的独占访问。

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

<configuration> 
    <runtime> 
        <gcServer enabled="true"/> 
    </runtime> 
    ...
</configuration> 
于 2013-06-14T22:50:49.917 回答