c# – UI调度缓冲?
我有一个难题.我“继承”了一个非常糟糕的设计和非常复杂的系统,我正在进行现代化和重建(与我的团队一起).问题是当前系统依赖于200个用户,并且由于(缺乏)设计,他们在性能方面存在重大问题.目前最棘手的问题是在UI线程上放置了大量的工作,这导致GUI挂起,直到线程被清除并且消息泵送可以继续.这项工作大部分确实需要在GUI线程上,因为由于其他线程上的其他计算结果,它正在更新网格中的大量字段.
问题是:我没有资源专门用于重写这里涉及的线程模型和底层类,而且这项工作的复杂性会带来很大的风险,这对我的客户来说是不可接受的. 我想知道是否有人有任何关于如何使UI更高效的建议,而不会过多地干扰currnet线程模型. 我最初的想法是,可能有某种方法可以在UI线程的实际调用之前放置一个“缓冲区”,以确保GUI不会过载,或者什么时候退出调度到它. 任何建议将不胜感激. 我知道这些都不是理想的,但我们就是这样,我真的希望在为期一年的重写完成之前为用户提供更好的体验! 谢谢! 更新#1 更新#2 解决方法
我不知道它是否会在你的特定情况下起作用,但我过去一直处于类似的(尽管可能不那么紧张)的情况,而我在
came up with some code中让我从背景中编组了或多或少的任意代码线程到UI线程.这是在WinForms时代写的.
这可能会为您提供一种风险较低的技术,让您可以在某些后台线程上重新计算一些计算,并且可以更轻松地将UI更新编组到前台,而无需完整地重新构建线程模型(或缺少线程模型). 关于UI的性能,有时提高速度的最佳方法是做得更少.我创建链接代码时正在处理的应用程序是解析数百兆字节的字符串来手动munge一些xml.用stringbuilders替换不可变字符串使得操作从OOM失败状态到挂钟时间的5分钟内完成.然后我注意到,对于它解析的每个元素,它都更新了UI.我调整了代码来每隔50个元素更新一次ui,并将其缩短到一分钟.关闭所有UI更新会将时间缩短到几秒钟. 在计算完成之前,您是否考虑过不更新UI,可能只是运行进度条?另一种可能性(在我的头顶,不知道它有多邪恶)是将更新排队为字典中的lambdas,该字典是关闭控件的更新.这样,如果单个控件多次更新,则可以将冗余更新替换为值,例如,(这假设应用程序不是直接从UI读取值来执行计算.当然.它可能是.:() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ruby-on-rails – Github上组织的Repos(公共和私有)列表
- postgresql中COPY的用法
- 使用PostgreSQL进行字母数字排序
- linix服务器 安装oracle12c
- 几种客户端连接 PostgreSQL 不输入密码的方法
- Binary XML file line #8: Error inflating class android.
- 如何为xml文件注释生成doxygen文档?
- jar依赖版本不一致导致的诡异情况
- 【COCOS2DX-LUA 脚本开发之一】在Cocos2dX游戏中使用Lua脚本
- ruby-on-rails-3 – 没有路由匹配[GET]“/ auth / facebook