Rus*_*uss 3 multicore .net-3.5
我知道如何获取我的机器上的物理数量和逻辑处理器数量,但我想知道我的应用程序可以访问多少个逻辑处理器.
例如,我在四核机器上开发,但我有许多单核用户,并且在许多情况下我"愚弄"接口,或遇到多核系统从未经历过的锁定问题.
所以,为此我设置了VSTS来在调试或"Debug Single Core"中构建我的应用程序.目标基本上是将处理器亲和性设置为核心"0",通过查看Windows任务管理器正在按预期工作.
我的问题是,我只是注意到了,(后面的视线显然应该是显而易见的),在我的代码中Environment.ProcessorCount >= something,我的代码非常适用于真正的单核机器,但是没有给我一个关于我的单个"逻辑可用"的读物核心".
如何获得"可用"逻辑核心的数量?
C#首选
特别感谢Jesse Slicer在这里找到的答案.
虽然不是问题的接受答案,但这是我正在寻找的答案.
基于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);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
741 次 |
| 最近记录: |