【发布时间】:2015-09-30 16:01:20
【问题描述】:
我正在寻找一种方法来提高我的代码的性能。我有一个带有文本框和图表的 WPF GUI(来自 OxyPlot 包)。我使用 StopWatch 来查找代码效率较低的地方,我发现更新 TextBox 的 Text 比填充字符串需要更多时间。比如MyText属性绑定到TextBox的Text属性,那么这部分代码
Application.Current.Dispatcher.Invoke(()=>{
MyText = currentString;
});
花费的时间比所有这些都多
StringBuilder sb = new StringBuilder();
RetrieveDataFromDevice();
FillString(sb);
string currentString = sb.ToString();
还有秒表:
Task.Factory.StartNew(() =>
{
var sw = new StopWatch();
sw.Start();
StringBuilder sb = new StringBuilder();
RetrieveDataFromDevice();
FillString(sb);
string currentString = sb.ToString();
Trace.WriteLine(sw.ElapsedMilliseconds.ToString()); //5ms
sw.Restart();
Application.Current.Dispatcher.Invoke(()=>{
MyText = currentString;
});
Trace.WriteLine(sw.ElapsedMilliseconds.ToString()); //10ms
}
存在性能问题,因为我无法每 15 毫秒刷新一次字符串(或图表)。有什么方法可以提高这些性能吗?
【问题讨论】:
-
为什么要更新用户界面的频率超过 15 毫秒?人眼无法感知这样的频率。
-
关键是当我想更快地运行以供以后分析时,我必须禁用 GUI 更新(因为我的数据也保存到文件中)。我曾经降低频率,但由于我希望在我的数据上看到更快的现象,我试图减少两次测量之间的延迟,我注意到 GUI 是瓶颈。解决方案是禁用 GUI 刷新,但我想探索其他解决方案。谢谢!
标签: c# wpf multithreading mvvm