我在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#多线程进程中线程的局部堆


基础教程推荐
- 实例详解C#实现http不同方法的请求 2022-12-26
- C#获取指定目录下某种格式文件集并备份到指定文件夹 2023-05-30
- Unity 如何获取鼠标停留位置下的物体 2023-04-10
- C#通过标签软件Bartender的ZPL命令打印条码 2023-05-16
- C#中的Linq to JSON操作详解 2023-06-08
- Unity shader实现高斯模糊效果 2023-01-16
- c# – USING块在网站与Windows窗体中的行为不同 2023-09-20
- C# 解析XML和反序列化的示例 2023-04-14
- C#调用摄像头实现拍照功能的示例代码 2023-03-09
- C#中 Json 序列化去掉null值的方法 2022-11-18