我正在对DataCache的新实现进行一些基础工作性能测试。我理解这个概念,比如在将gui更新任务推送到调度员之前将任务缓冲到批处理或给出一些跳跃时间。
这只是一个测试目的,可以在很短的时间内将大量任务投入Dispatcher.BeginInvoke,如下所示。
private ICommand _onStartBackgroundProcessCommand;
public ICommand OnStartBackgroundProcessCommand
{
get
{
return _onStartBackgroundProcessCommand ?? (_onStartBackgroundProcessCommand = new RelayCommand(p =>
Task.Factory.StartNew(() =>
{
for (var i = 0; i < 1000000; i++)
{
UpdateDummyString(i);
}
}
)));
}
}
public void UpdateDummyString(int runningIndex)
{
UIDispatcher.BeginInvoke(new Action(() =>
{
DummyString = runningIndex.ToString();
}), DispatcherPriority.Background);
}
public string DummyString
{
get { return _dummyString; }
set
{
_dummyString = value;
OnPropertyChanged();
}
}
我发现gui仍然非常敏感,即使我在后台投入了大量的工作。
我想知道频繁后台更新的大部分问题都可以通过设置正确的DispatcherPriority来解决。我的意思是将DispatcherPriority保留为数据流更新的后台,如果用户操作触发gui更新任务,则将DispatcherPriority设置为正常。
我在这里遗漏了什么吗?