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

我在C#中有一个多线程进程,每个线程经常尝试从堆中分配内存.这需要多个堆锁,因此降低了线程的优势.是否存在类似线程的本地堆,因此同时尝试从不同线程分配内存不会锁定其中一个?解决方法:根据this article,当多个线...

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

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

解决方法:

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

Synchronization-free Allocations On a multiprocessor system,
generation 0 of the managed heap is split into multiple memory arenas
using one arena per thread. This allows multiple threads to make
allocations simultaneously so that exclusive access to the heap is not
required.

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

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

本文标题为:C#多线程进程中线程的局部堆

基础教程推荐