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

时间:2010-01-25 18:26:04

标签: .net-3.5 multicore

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

例如,我在四核机器上开发,但我有许多单核用户,在很多情况下我“愚蠢”了界面,或遇到多核系统从未遇到的锁定问题经验。

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

我的问题是,我只是注意到了,(后面的视线显然应该是显而易见的),在我的代码中我有Environment.ProcessorCount >= something,这对真正的单核机器很有用,但是不给我阅读我的单个“逻辑可用核心”。

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

C#首选

1 个答案:

答案 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);
                }