Hag*_*gai 4 c# parallel-processing memory-management contention
继续从了解VS2010 C#并行性能分析结果的讨论,但更重要的是:
我有许多并行工作的线程(使用Parallel.For/Each),它们为小类使用许多内存分配.
这会在全局内存分配器线程上产生争用.
有没有办法指示.NET为每个线程预分配内存池并从该池中进行所有分配?
目前我的解决方案是我自己的内存池实现(全局分配的类型为T的对象数组,它们在线程中循环使用)这有很大帮助,但效率不高,因为:
谢谢,
哈该
小智 16
我搜索了两天试图找到你遇到的同一问题的答案.答案是您需要将垃圾收集模式设置为服务器模式.默认情况下,垃圾收集模式设置为Workstation模式.将垃圾收集设置为服务器模式会导致托管堆拆分为单独管理的部分,每个CPU一个.为此,您需要在app.config文件中添加配置设置.
<runtime>
<gcServer enabled="true"/>
</runtime>
Run Code Online (Sandbox Code Playgroud)
我的12核Opteron 6172的速度差异非常大!