.net-3.5 - 如何获取我的应用程序的 "Available"处理器数量?

标签 .net-3.5 multicore

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

例如,我在四核机器上进行开发,但我有许多单核用户,并且在许多情况下我“简化”了界面,或者遇到了多核系统永远不会出现的锁定问题经验。

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

我的问题是,我刚刚注意到(事后看来这应该是显而易见的),在我的整个代码中,我有 Environment.ProcessorCount >= some,这对于真正的单核非常有用机器,但没有让我了解我的单个“逻辑可用核心”。

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

首选C#

最佳答案

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

关于.net-3.5 - 如何获取我的应用程序的 "Available"处理器数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2134566/

相关文章:

c# - 将字符串转换为 float 据类型

performance - Intellij IDEA X : any multicore settings to be tweaked?

multithreading - R system()进程始终使用相同的CPU,而不是多线程/多核

c - OpenMP 不同结果 1 核与多核

c# - 用 AppDomains 替换 Process.Start

c# - 从类中获取 JSON 属性名称列表以在查询字符串中使用

c# - 在 C#.NET 中执行 bool 逻辑运算的最有效方法是什么?

c# - 一个对象上的垃圾收集,C#

r - 如何为 llply 的并行模式设置 preschedule=FALSE?

Scala并行收集运行时令人费解