我正在尋找一種方法來提高我的代碼的性能。我有一個帶有TextBox和圖形的WPF GUI(來自OxyPlot包)。我使用StopWatch查找代碼效率較低的地方,發現更新TextBox文本比填充字符串需要更多時間。例如,如果屬性MyText
綁定到文本框,然後這部分代碼的Text屬性C#WPF GUI性能MVVM
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
}
存在性能問題,因爲我不能每15ms更新一次字符串(或圖形)。有什麼方法可以改善這些表演嗎?
爲什麼要更新頻率超過15毫秒的用戶界面?人眼無法感知這樣的頻率。 –
關鍵是我必須禁用GUI更新時,我想要更快運行以供日後分析(因爲我的數據也保存到文件中)。我曾經降低頻率,但由於我希望在數據上看到更快的現象,我試圖減少兩次測量之間的延遲,並且我注意到GUI是瓶頸。解決方案是禁用GUI刷新,但我想探索其他解決方案。謝謝 ! – GuillaumeA