我正在尝试在具有16个物理处理器核心,32个逻辑的计算机上的进程上设置处理器关联。以前,我们使用的是int,但是当你有32个逻辑核时,它会溢出。
在设置处理器关联性时,使用long而不是int仍然有用吗?
请参阅下面的代码。
try
{
string pathToExe = GetPathToExe( jobType );
long processorAffinity = DetermineProcessorAffinity();
Process jobProcess = Process.Start( pathToExe, jobId.ToString() );
if ( jobProcess != null )
{
jobProcess.ProcessorAffinity = new IntPtr( processorAffinity );
}
}
答案 0 :(得分:4)
引擎盖下ProcessorAffinity
属性最终将调用Win32方法SetProcessAffinityMask
。
此方法适用于超过32个处理器,此解决方案应该可以使用。
请注意,这种方法在32位进程中不起作用。在32位进程中,IntPtr
的后备值仍为32位。 IntPtr
构造函数将静默地将long
值截断为int
值,并且您永远无法将额外处理器的亲和力设置为更多。
答案 1 :(得分:2)
IntPtr类型设计为 大小为的整数 特定于平台的。那是一个 预计这种类型的实例 在32位硬件和32位是32位 操作系统和64位 64位硬件和操作系统。
换句话说:它应该适用于64位系统,但不适用于32位系统。我想这不是你的问题。