我在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#多线程进程中线程的局部堆
基础教程推荐
- winform把Office转成PDF文件 2023-06-14
- C#控制台实现飞行棋小游戏 2023-04-22
- C# windows语音识别与朗读实例 2023-04-27
- C# 调用WebService的方法 2023-03-09
- ZooKeeper的安装及部署教程 2023-01-22
- unity实现动态排行榜 2023-04-27
- C#类和结构详解 2023-05-30
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- C# List实现行转列的通用方案 2022-11-02
- 一个读写csv文件的C#类 2022-11-06