アルゴリズムやパフォーマンスベンチマーキングについては比較的新しいですが、いくつか質問があります。C#アルゴリズムのパフォーマンスの変動
私は、すでに必要なプロセスループの中断を制限するために、小さな繰り返しで処理できるアルゴリズムを作成しました。私の目標は1ミリ秒以下で処理することでしたので、かなり一貫したパフォーマンスを持つことが非常に重要と思われます。
残念なことに、アルゴリズムを0.5msに平均化するためにプロセスウェイトを適用した後、私は時々20ms以上の時間を達成しました。私は、データ収集によっていくつかの問題が発生することに気付きました(私はそれがメモリ内で動いていると仮定しています)。私はそれ以来解決していますが、パフォーマンスの変動はまだあります。
ここで空白のメソッドを作成しました。ここでも私はこれらの時折高い時を得ます。
public void DoTask()
{
for (int i = 0; i < 100000; i++)
{
//do nothing
}
}
private void button1_Click(object sender, EventArgs e)
{
DoTask(); //burn
var watch = new Stopwatch();
watch.Start();
double time;
for (int j = 0; j < 20; j++)
{
for (int i = 0; i < 1000; i++)
{
time = watch.ElapsedTicks;
DoTask();
time = watch.ElapsedTicks - time;
LongestTime = Math.Max(LongestTime, time);
TotalTime += time;
Count++;
}
double avgTime = TotalTime/Count;
MessageBox.Show($"Longest time: {ToMs(LongestTime).ToString("#.##")} Avg time: {ToMs(avgTime).ToString("#.##")}");
TotalTime = 0;
Count = 0;
LongestTime = 0;
}
}
最長時間:13.04平均時間:0.01これが起こることを引き起こしている何
?それは私がコントロールできないものですか?
ありがとうございました。
.NETアプリケーションでは、確定的な実行時間を保証することはできません。あなたがコントロールできないガベージコレクタがあります。 .NETは「ハードリアルタイム」アプリケーションには適していません。 – dymanoid
DoTask()はポストにあります。何もしません。 –
また、マルチタスクOSに取り組んでいることを忘れないでください。そうすれば、他のプログラムがCPU時間を稼いでいる間にあなたの計算が保留になる可能性は非常に高いです。 – fvu