我已经想出如何在单个处理器上设置进程关联掩码来运行进程:
Process p = ... //getting required process
p.ProcessorAffinity = (IntPtr)0x0001;
但我无法弄清楚如何将其设置回所有处理器。我该怎么办?感谢。
答案 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