一部のテストでは、実行に約10秒かかるC#関数が必要です。 ASPXページから呼び出されますが、レンダリング時間ではなく、サーバーのCPU時間を消費する関数が必要です。 Northwindsデータベースへのクエリが遅いか、非常に遅い計算がいくつかあります。何か案は?
CPUを集中的に使用する作業をシミュレートするために、n番目の素数を計算してみてください-
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集中型の作業をシミュレートします。
おそらく最も単純なそのような関数はこれです:
public void Slow()
{
var end = DateTime.Now + TimeSpan.FromSeconds(10);
while (DateTime.Now < end)
/* nothing here */ ;
}
「while」ループを使用して、CPUをビジー状態にすることができます。
void CpuIntensive()
{
var startDt = DateTime.Now;
while (true)
{
if ((DateTime.Now - startDt).TotalSeconds >= 10)
break;
}
}
このメソッドは、whileループに10秒間留まります。また、このメソッドを複数のスレッドで実行すると、すべてのCPUコアをビジー状態にすることができます。
複数のコアを最大化するために、@ 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.
これは、単一のスレッド/ CPUでCPUを集中的に使用し、10秒間続きます。
var endTime = DateTime.Now.AddSeconds(10);
while(true) {
if (DateTime.Now >= endTime)
break;
}
補足として、通常これを行うべきではありません。
使うだけThread.Sleep(number of milliseconds here);
追加する必要がありますusing System.Threading;