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

Kam*_*mil 4 c# heap multithreading

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

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

小智 5

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

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

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

<configuration> 
    <runtime> 
        <gcServer enabled="true"/> 
    </runtime> 
    ...
</configuration> 
Run Code Online (Sandbox Code Playgroud)

  • 你错过了这个答案的重要部分.执行此操作的GC模式仅在服务器类计算机上自动启用.它必须在工作站上强行使用.记录`<gcServer>`元素以清除它. (5认同)