C#中的多线程CPU使用率

Roe*_*sim 15 c# multithreading cpu-usage

我的程序使用预定数量的线程,每个线程都执行独立工作.我使用i7-2600 CPU,但我关闭了超线程模块,因此它在4个内核上运行4个线程.当我使用1个线程运行程序时,CPU使用率为25%,这是完全使用1个线程的完美,但是当我运行4或3个线程时,我只获得60%的CPU,为什么?

就像我之前提到的那样,线程是完全独立的(没有锁和没有争论)当我用1个线程运行程序4次时,我获得了100%的CPU使用率(即,当每个进程的4个进程为1个线程时,我得到了正确的CPU使用率)

有任何想法吗?

更多信息:

  1. 在处理所有需要的数据时,我没有使用I/O加载到内存中,每个线程在处理之前加载自己的数据.
  2. 我从数据库加载数据(使用oleDb),但我正在描述的问题发生在加载后所有线程都在处理(没有加载完成).
  3. 数字是:
    • 2个线程大约40%而不是50个(每个线程85%).
    • 3个线程大约50%而不是75个(每个线程65%).
    • 4个线程大约60%而不是100个(每个线程60%).
  4. 我使用带有16GB内存的i7 2600,但该进程的内存使用率并未接近.
  5. 我运行Windows性能监视器来寻找没有的争用.

wei*_*mat 3

您可以尝试将程序从工作站垃圾收集模式转变为服务器垃圾收集模式。目前您只能使用一个垃圾收集线程。此处
解释了该设置。 请参阅此线程以获取解释/更多详细信息。 不要指望更改后 CPU 负载达到 100%,但您会更接近 100%,并且速度会加快。