我在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%。
在人们问我之前,我知道它永远不会使用整个CPU的100%,因为它是单线程的。我只想100%拥有一个逻辑处理器。
任何帮助将不胜感激。
编辑:与仅在一个运行exe的CPU上运行一个线程应用程序无济于事,这不是linq表达式。
答案 0 :(得分:2)
使用此方法,每个CPU可获得100%的利用率,或者每个核心使用率可获得100%
我不得不将计数器更改为很长的时间,因为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();
}
}
}
}