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

本文关键字:局部 线程 多线程 进程 | 更新日期: 2023-09-27 18:18:24

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

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

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

根据本文,当多个线程并发地分配内存时,在多处理器系统中不存在争用:

在一个多处理器系统中,托管堆的第0代被划分为多个内存区域每个线程使用一个竞技场。这允许多个线程同时分配,这样就不会对堆进行独占访问必需的。

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

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