我知道如何获取计算机上的物理处理器数量和逻辑处理器数量,但我想知道我的应用程序可以访问多少个逻辑处理器。
例如,我在四核机器上进行开发,但我有许多单核用户,并且在许多情况下我“简化”了界面,或者遇到了多核系统永远不会出现的锁定问题经验。
因此,为此,我设置了 VSTS 以在调试或“调试单核”中构建我的应用程序。那里的目标基本上是将处理器亲和性设置为核心“0”,通过查看 Windows 任务管理器是否按预期工作。
我的问题是,我刚刚注意到(事后看来这应该是显而易见的),在我的整个代码中,我有 Environment.ProcessorCount >= some
,这对于真正的单核非常有用机器,但没有让我了解我的单个“逻辑可用核心”。
如何获取“可用”逻辑核心的数量?
首选C#
最佳答案
特别感谢Jesse Slicer's找到答案 here .
虽然不是所提问题的公认答案,但它是我正在寻找的答案。
这基本上是我根据杰西的回答得到的结果。
#if !DEBUG
return Environment.ProcessorCount;
#endif
using (Process currentProcess = Process.GetCurrentProcess())
{
var processAffinityMask =
(uint) currentProcess.ProcessorAffinity;
const uint BitsPerByte = 8;
var loop = BitsPerByte*sizeof (uint);
uint result = 0;
while (loop > 0)
{
--loop;
result += (processAffinityMask & 1);
processAffinityMask >>= 1;
}
return Convert.ToInt32((result != 0) ? result : 1);
}
关于.net-3.5 - 如何获取我的应用程序的 "Available"处理器数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2134566/