スレッド内のローカル サーバーから一連の変数を読み取るベンチマーク ツールをプログラミングしています。
int countReads = 1000;
Int64 count = 0;
for (int i = 0; i < countReads; i++)
{
Thread.CurrentThread.Priority = ThreadPriority.Highest;
DateTime start = DateTime.Now;
session.Read(null, 0, TimestampsToReturn.Neither, idCollection, out ReadResults, out diagnosticInfos);
DateTime stop = DateTime.Now;
Thread.CurrentThread.Priority = ThreadPriority.Normal;
TimeSpan delay = (stop - start);
double s = delay.TotalMilliseconds;
count += (Int64)s;
Dispatcher.Invoke(DispatcherPriority.Render, new Action(() =>
{
progressBar1.Value = i;
}));
}
double avg = (double)count / countReads;
Dispatcher.Invoke(DispatcherPriority.Input, new Action(() =>
{
listBox1.Items.Add(avg);
}));
読み取りを進めるのにかかったタイムスパンを計算し、最後に平均タイムスパンを取得しています。
DateTime start = DateTime.Now;
session.Read(null, 0, TimestampsToReturn.Neither, idCollection, out ReadResults, out diagnosticInfos);
DateTime stop = DateTime.Now
プログレスバーを更新せずにコードを実行すると、平均で約 5 ミリ秒かかりました。しかし、私がそれを実行すると
Dispatcher.Invoke(DispatcherPriority.Render, new Action(() =>
{
progressBar1.Value = i;
}));
平均で約 10 ミリ秒かかります。
私の質問は、プログレスバーを使用するとタイムスパンが高くなるのはなぜですか? 読み取りのタイムスパンを計算しているだけです。プログレスバーの更新は含まれません。
読み取りタイムスパンに影響を与えないように、UI ペインティングを退避する方法はありますか?
ご協力いただきありがとうございます。
よろしくお願いします