经过一些实验,我想我已经做到了。我注意到ThreadPool
将系统中的处理器数量视为当前进程可用的处理器数量。这对你有利。
我的 CPU 有 4 个核心。尝试打电话SetMaxThreads
with 2:
ThreadPool.SetMaxThreads(2, 2);
失败,因为我有 4 个核心,因此数字保持其初始值(我的系统为 1023 和 1000)。
然而,正如我一开始所说的,ThreadPool
只考虑进程可用的处理器数量,我可以使用它来管理Process.ProcessorAffinity
。这样做:
Process.GetCurrentProcess().ProcessorAffinity = new IntPtr(3);
将可用处理器限制为前两个内核(因为二进制中 3 = 11)。呼唤SetMaxThreads
again:
ThreadPool.SetMaxThreads(2, 2);
应该像魅力一样发挥作用(至少对我来说是这样)。只需确保在程序启动时使用亲和力设置即可!
当然,我不鼓励这样做hack,因为无论如何,您的进程在整个执行期间都会被有限数量的核心所困扰。