このロジックをWPFアプリケーションで使用しています。(データベースから)視覚的に3秒で実行が行われているのを確認していますが、何らかの理由でストップウォッチが17秒以上出力します。
Parallel.Forブロック内のコードは、多くの計算を行い、dbに書き込みます。つまり、視覚的には、データベースからクエリを選択することを意味します。
Stopwatch stopwatch = new Stopwatch();
// Begin timing
stopwatch.Start();
String currentTime = System.DateTime.Now.ToString();
statusLabel.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background,
new Action(delegate() { statusLabel.Content = "New Minute data processing..." + currentTime; }));
int size = NumSymWatching;
Parallel.For(0, size, x =>
{
CalculateStudies(SymbolsToWatch[x], SymbolSessions[x]);
});
UpdateApplicationStatusTable();
stopwatch.Stop();
statusLabel.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background,
new Action(delegate() { lblTimer.Content = "Time taken to run: " + stopwatch.Elapsed; }));
isRunning = false;
編集 いくつかのテストの後、Parallel.Forループの周りでストップウォッチを使用しても問題がないことがわかりました。