增加单核CPU使用率

时间:2019-01-06 21:01:43

标签: c# .net performance

我在C#中有一个简单的while循环,如下所示:

private static long a;

static void Main(string[] args)
{
    a = 0;
    while (a >= 0)
        a++;
    Console.WriteLine(a);
}

无论我做什么,都不会使用单个CPU线程(逻辑处理器)的60%以上,通常约40%。我希望它像C ++循环那样使用100%。

  • 我正在发布模式下运行
  • 我包括了writeline,以便强制其保持循环而不优化循环
  • 静态,因此它不能自动创建委托线程(不确定是否可以,但是要确定)
  • 如果需要的话,使用.NET core 2.1
  • Visual Studio 2017 IDE /编译器
  • 常规控制台应用

在人们问我之前,我知道它永远不会使用整个CPU的100%,因为它是单线程的。我只想100%拥有一个逻辑处理器。

任何帮助将不胜感激。

编辑:与仅在一个运行exe的CPU上运行一个线程应用程序无济于事,这不是linq表达式。

1 个答案:

答案 0 :(得分:2)

使用此方法,每个CPU可获得100%的利用率,或者每个核心使用率可获得100% 1 all

我不得不将计数器更改为很长的时间,因为PC对于int而言太快了:-)

对于单胎面测试,我还必须将亲和力设置为一个核心,否则它将不断更改核心。

我的猜测是您的工具报告了错误的值。如果CPU具有Turbo模式,则可以在某些SW中显示无意义的值。在这种情况下,Windows通常会显示100%以上的CPU频率。

另一个原因可能是过热或节电。

尝试在最高性能设置和另一台PC上

using System;
using System.Threading;

namespace ConsoleApp1
{
    class Program
    {
        static void BusyDelay()
        {
            long i = 10000000000;
            while (i-- > 0) ;
        }

        static void Main(string[] args)
        {
            /* use "1" intead of "ProcessorCount" for single thread insted */
            for (int i = 0; i < Environment.ProcessorCount ; i++)
            {
                new Thread(BusyDelay).Start();                
            }                        
        }
    }
}