我正在编写一个基准测试工具,它在一个线程中从本地服务器读取一些变量。
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绘制,以便它不会影响我的阅读时间跨度?
谢谢你的帮助。
最好的问候