代码之家  ›  专栏  ›  技术社区  ›  Russ

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

  •  2
  • Russ  · 技术社区  · 15 年前

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

    例如,我在一台四核机器上开发,但是我有许多单核用户,在许多情况下,我“哑”了界面,或者遇到了多核系统从未经历过的锁定问题。

    因此,为了达到这个目的,我已经设置了VST,以在调试或“调试单核”中构建我的应用程序。这里的目标基本上是将处理器关联性设置为核心“0”,通过查看Windows任务管理器,它可以正常工作。

    我的问题是,我刚刚注意到,(事后看来应该很明显),在我的代码中 Environment.ProcessorCount >= something 它对真正的单核机器非常有用,但没有给我一个关于我的单“逻辑可用的核心”的阅读。

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

    C首选

    1 回复  |  直到 15 年前
        1
  •  5
  •   Community CDub    8 年前

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