对于一些测试,我做我需要一个C#函数,采用10秒左右来执行。 它会从一个ASPX页面调用,但我需要的功能,吃起来的CPU时间在服务器上,而不是渲染时间。 慢查询到罗斯文数据库会的工作,或者一些很慢的计算。 有任何想法吗?
Answer 1:
试算第n个质数来模拟CPU密集型的工作 -
public void Slow()
{
long nthPrime = FindPrimeNumber(1000); //set higher value for more time
}
public long FindPrimeNumber(int n)
{
int count=0;
long a = 2;
while(count<n)
{
long b = 2;
int prime = 1;// to check if found a prime
while(b * b <= a)
{
if(a % b == 0)
{
prime = 0;
break;
}
b++;
}
if(prime > 0)
{
count++;
}
a++;
}
return (--a);
}
这将需要花多少时间将取决于系统的硬件配置。
因此,与尝试输入1000,然后要么增加输入值或减少它。
该功能将模拟CPU密集型工作。
Answer 2:
可以说,最简单的这种功能是这样的:
public void Slow()
{
var end = DateTime.Now + TimeSpan.FromSeconds(10);
while (DateTime.Now < end)
/*nothing here */ ;
}
Answer 3:
您可以使用“而”循环,使CPU的繁忙。
void CpuIntensive()
{
var startDt = DateTime.Now;
while (true)
{
if ((DateTime.Now - startDt).TotalSeconds >= 10)
break;
}
}
这种方法将留在while循环,持续10秒。 此外,如果您在运行多线程这个方法,你可以让所有的CPU内核忙碌。
Answer 4:
对于杏多核我调整@ Motti的回答了一下,得到如下:
Enumerable
.Range(1, Environment.ProcessorCount) // replace with lesser number if 100% usage is not what you are after.
.AsParallel()
.Select(i => {
var end = DateTime.Now + TimeSpan.FromSeconds(10);
while (DateTime.Now < end)
/*nothing here */ ;
return i;
})
.ToList(); // ToList makes the query execute.
Answer 5:
这是一个单独的线程/ CPU上CPU密集型的,并且持续10秒。
var endTime = DateTime.Now.AddSeconds(10);
while(true) {
if (DateTime.Now >= endTime)
break;
}
作为一个侧面说明,你通常不应这样做。
Answer 6:
只要使用
Thread.Sleep(number of milliseconds here);
你将不得不增加using System.Threading;
文章来源: I need a slow C# function