如何设置进程亲和力为"所有处理器"在C#?

时间:2017-09-12 13:23:10

标签: c# affinity

我已经想出如何在单个处理器上设置进程关联掩码来运行进程:

Process p = ... //getting required process
p.ProcessorAffinity = (IntPtr)0x0001;

但我无法弄清楚如何将其设置回所有处理器。我该怎么办?感谢。

2 个答案:

答案 0 :(得分:1)

根据MSDN

https://msdn.microsoft.com/en-us/library/system.diagnostics.process.processoraffinity(v=vs.110).aspx

  

一个位掩码,表示处理器中的线程   关联的进程可以运行。默认值取决于数量   计算机上的处理器。默认值为 2 ^ n - 1 ,其中n为   处理器数量

所以你应该把

Process p = ...

p.ProcessorAffinity = (IntPtr)((1 << Environment.ProcessorCount) - 1);

为了解除限制(现在p可以在任何处理器上运行:我们有11...11位掩码和N个,N是逻辑的编号处理器)

答案 1 :(得分:1)

听起来你想要将亲和力恢复为默认值(请记住,这并不一定与所有处理器相同,默认值为2 ^ n -1,其中n是处理器的数量,见the documentation)。

要返回默认值,只需将默认值存储在变量中,然后重新分配即可。

void Main()
{
    Process p = Process.GetProcessById(12008);
    var originalAffinity = p.ProcessorAffinity;
    Console.WriteLine("Original affinity: " + originalAffinity);
    p.ProcessorAffinity = (IntPtr)0x0001;
    Console.WriteLine("Current affinity: " + p.ProcessorAffinity);
    p.ProcessorAffinity = originalAffinity;
    Console.WriteLine("Final affinity: " + p.ProcessorAffinity);    
}

我的机器上的结果:

  

原始亲和力:255

     

目前的亲和力:1

     

最终亲和力:255