我知道如何获取我的计算机上的物理数量和逻辑处理器数量,但我想知道我的应用程序可以访问多少个逻辑处理器。
例如,我在四核机器上开发,但我有许多单核用户,在很多情况下我“愚蠢”了界面,或遇到多核系统从未遇到的锁定问题经验。
所以,为此,我已经设置了VSTS来在调试或“Debug Single Core”中构建我的应用程序。目标基本上是将处理器亲和性设置为核心“0”,通过查看Windows任务管理器正在按预期工作。
我的问题是,我只是注意到了,(后面的视线显然应该是显而易见的),在我的代码中我有Environment.ProcessorCount >= something
,这对真正的单核机器很有用,但是不给我阅读我的单个“逻辑可用核心”。
如何获得“可用”逻辑核心的数量?
C#首选
答案 0 :(得分:5)
特别感谢Jesse Slicer's找到here的答案。
虽然不是所接受的问题的答案,但这是我正在寻找的答案。
根据Jesse的回答,基本上我最终得到了什么。
#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);
}