私はいくつかの実験を実行し、それらのタイミングを計り、時間を比較して最良の「アルゴリズム」を見つけています。出てきた質問は、タスクを並行して実行すると実験の相対的な実行時間が間違ってしまうのか、そしてそれらを順番に実行することでより代表的な結果が得られるのかということでした。コードの(簡略化された)バージョンは次のとおりです。
public static void RunExperient(IEnumerable<Action> experiments)
{
Parallel.ForEach(experiments, experiment =>
{
var sw = Stopwatch.StartNew(); //line 1
experiment(); //line 2
sw.Stop(); //line 3
Console.WriteLine(@"Time was {0}", sw.ElapsedMilliseconds);
});
}
私の質問は、「舞台裏」で何が起こっているかについてです。
タスクが開始されたときに、OSまたはフレームワークが実行中にタスクを一時停止し、後で続行して実験の実行時間をすべて間違ってしまう可能性はありますか?
実験を順番に実行することで、より代表的な結果を得ることができますか?