如何为我的应用程序获取"可用"处理器的数量?

Rus*_*uss 3 multicore .net-3.5

我知道如何获取我的机器上的物理数量和逻辑处理器数量,但我想知道我的应用程序可以访问多少个逻辑处理器.

例如,我在四核机器上开发,但我有许多单核用户,并且在许多情况下我"愚弄"接口,或遇到多核系统从未经历过的锁定问题.

所以,为此我设置了VSTS来在调试或"Debug Single Core"中构建我的应用程序.目标基本上是将处理器亲和性设置为核心"0",通过查看Windows任务管理器正在按预期工作.

我的问题是,我只是注意到了,(后面的视线显然应该是显而易见的),在我的代码中Environment.ProcessorCount >= something,我的代码非常适用于真正的单核机器,但是没有给我一个关于我的单个"逻辑可用"的读物核心".

如何获得"可用"逻辑核心的数量?

C#首选

Rus*_*uss 5

特别感谢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)