我使用 C# 作为研究工具,并且经常需要运行 CPU 密集型任务,例如优化。从理论上讲,我应该能够通过多线程我的代码来获得很大的性能改进,但在实践中,当我使用与工作站上可用的内核数相同的线程数时,我通常会发现 CPU 仍然只运行在 25最大的 %-50% 中断代码以查看所有线程在做什么强烈表明内存分配是瓶颈,因为大多数线程将等待new
语句执行。
一种解决方案是尝试重新设计我的所有代码以提高内存效率,但这将是一项艰巨且耗时的任务。但是,由于我的工作站上有大量内存,我想知道是否可以通过设置不同的线程来回避这个问题,以便它们每个都有自己的私有内存池可供使用。当然,有些对象仍然需要在所有线程之间公开,否则将无法为每个线程指定任务或获取结果。
有谁知道这种方法在 C# 中是否可行,如果可以,我应该怎么做?