问题是:我没有资源专门用于重写这里涉及的线程模型和底层类,而且这项工作的复杂性会带来很大的风险,这对我的客户来说是不可接受的.
我想知道是否有人有任何关于如何使UI更高效的建议,而不会过多地干扰currnet线程模型.
我最初的想法是,可能有某种方法可以在UI线程的实际调用之前放置一个“缓冲区”,以确保GUI不会过载,或者什么时候退出调度到它.
任何建议将不胜感激.
我知道这些都不是理想的,但我们就是这样,我真的希望在为期一年的重写完成之前为用户提供更好的体验!
谢谢!
更新#1
这是一个winforms应用程序……对不起,这一开始并不清楚.新代码是WPF,但这些模块是winforms.
更新#2
我想我可能最初尝试将大多数BeginInvoke调用更改为UI线程调用Invoke,引入序列化,希望能够提高UI响应能力.
这里有任何(非显而易见的)缺点,任何人都可以预见到吗?
解决方法
这可能会为您提供一种风险较低的技术,让您可以在某些后台线程上重新计算一些计算,并且可以更轻松地将UI更新编组到前台,而无需完整地重新构建线程模型(或缺少线程模型).
关于UI的性能,有时提高速度的最佳方法是做得更少.我创建链接代码时正在处理的应用程序是解析数百兆字节的字符串来手动munge一些xml.用stringbuilders替换不可变字符串使得操作从OOM失败状态到挂钟时间的5分钟内完成.然后我注意到,对于它解析的每个元素,它都更新了UI.我调整了代码来每隔50个元素更新一次ui,并将其缩短到一分钟.关闭所有UI更新会将时间缩短到几秒钟.
在计算完成之前,您是否考虑过不更新UI,可能只是运行进度条?另一种可能性(在我的头顶,不知道它有多邪恶)是将更新排队为字典中的lambdas,该字典是关闭控件的更新.这样,如果单个控件多次更新,则可以将冗余更新替换为值,例如,(这假设应用程序不是直接从UI读取值来执行计算.当然.它可能是.:()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。