gpt4 book ai didi

C# WPF GUI 性能 MVVM

转载 作者:行者123 更新时间:2023-11-30 16:05:58 24 4
gpt4 key购买 nike

我正在寻找提高代码性能的方法。我有一个带有文本框和图形的 WPF GUI(来自 OxyPlot 包)。我使用 StopWatch 找到代码效率较低的地方,我发现更新我的 TextBox 的文本比填充字符串需要更多时间。例如,如果属性 MyText 绑定(bind)到 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 毫秒更频繁地刷新字符串(或图形)。有什么方法可以提高这些性能吗?

最佳答案

尝试使用 Dispatcher.BeginInvoke方法而不是 Invoke 方法。

此方法不会等待 UI 线程处理请求后才能继续。它只是将请求放入 UI 线程的队列中,然后立即返回。

这将允许您在 UI 线程处理 UI 请求时在后台线程中执行更多处理。

话虽如此,您要求 UI 线程每秒处理的 UI 更新请求数量应该合理。

关于C# WPF GUI 性能 MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32870719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com