如何将流程关联性设置为";“所有处理器”;在C#中?
我已经了解了如何设置进程关联掩码,使其仅在单个处理器上运行进程:如何将流程关联性设置为";“所有处理器”;在C#中?,c#,affinity,C#,Affinity,我已经了解了如何设置进程关联掩码,使其仅在单个处理器上运行进程: Process p = ... //getting required process p.ProcessorAffinity = (IntPtr)0x0001; 但我不知道如何将它设置回所有处理器。我该怎么做?谢谢。根据MSDN 一个位掩码,表示在 关联的进程可以在上运行。默认值取决于 计算机上的处理器。默认值为2^n-1,其中n为 处理器的数量 所以你应该把 Process p = ... p.ProcessorAffin
Process p = ... //getting required process
p.ProcessorAffinity = (IntPtr)0x0001;
但我不知道如何将它设置回所有处理器。我该怎么做?谢谢。根据MSDN
一个位掩码,表示在
关联的进程可以在上运行。默认值取决于
计算机上的处理器。默认值为2^n-1,其中n为
处理器的数量
所以你应该把
Process p = ...
p.ProcessorAffinity = (IntPtr)((1 << Environment.ProcessorCount) - 1);
进程p=。。。
p、 ProcessorAffinity=(IntPtr)((1听起来您希望将关联性返回到默认值(请记住,这不一定与所有处理器相同,默认值为2^n-1,其中n是处理器的数量,请参阅)
要返回默认值,只需将默认值存储在变量中,然后重新分配它
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
你假设它被设置为所有处理器——可能启动方式不同。为什么不先获取p.ProcessorAffinity
的值,然后再恢复?你有麻烦吗?@mason该链接如何回答这个问题?@CodeMaster他问如何将其设置为“所有处理器”。这意味着他不知何故将其设置为之前的所有处理器,但忘记了默认值是“所有处理器”(不太可能),或者错误地认为默认值是“所有处理器”。阅读文档将纠正这种错误印象,并解释如何将其设置为在您想要的任何处理器上运行。似乎相关。您不同意吗?@Jeroen Mostert这很好。我怎么没想到呢?非常感谢,工作非常完美。