我正在编写一个基准工具,它从线程中的本地服务器读取一堆变量。
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-painting 以免影响我的阅读时间跨度?
谢谢你的帮助。
最好的祝福