winform 程序如何异步加载/生成控件

小驴来这里学习 2015-07-21 01:56:39
本人之前一直做web程序,现在接手了一个winform程序,遇到一个问题。

有一个界面打开特别慢——InitializeComponent 方法里面的代码超过了18000行,30多个数据源。当然程序也做了处理,第二次打开这个界面基本上是秒开。
我还是对第一次的打开速度“耿耿于怀”,因为界面有很多个tab,打开时真正显示在屏幕上的控件大概只占所有控件的九分之一,这个界面已经非常复杂,重新做不太现实。
不知道应该从哪方面入手,如何去优化。
...全文
883 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ajianchina 2015-07-21
  • 打赏
  • 举报
回复
你这样的数据图表软件,很多winform程序都是这样做的,不能在控件初始化的时候等待连接数据的,弄得不好,就是卡死。
ajianchina 2015-07-21
  • 打赏
  • 举报
回复
18000行,控件好多啊,控件数量多应该仅是初始化慢的一些元素,但我觉得主要因素不在这里,看了你的截图,应该是你的相关控件初始化过程中需要连接数据源,这个过程就不仅仅是控件初始化的问题了,会有很多对象初始化、等待连接、获取数据,你可以先对控件初始化跟绑定数据源这两块进行异步操作,可以选择多线程+委托的方式,先看下效果。
Poopaye 2015-07-21
  • 打赏
  • 举报
回复
引用 3 楼 Jelly1989 的回复:
[quote=引用 1 楼 shingoscar 的回复:] 你说的这些行数啊,数据源啊都没什么意义 找出加载慢具体慢再哪几步,再去想怎么优化
最慢的应该就是.Designer.cs里面InitializeComponent方法[/quote] 你一开始就说了InitializeComponent 方法里面的代码超过了18000行,不可能这些代码平均分配了执行时间啊 1. 找出最耗时的那些步骤 2. 再考虑是去掉这些步骤等之后再执行,还是用异步的方法来实现 3. 看加载的时间是否能接受,不能就重复第1步
寂空冷 2015-07-21
  • 打赏
  • 举报
回复
在FormLoad事件中,界面上的数据用异步Task加载绑定,构造函数中不绑定数据
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
你说的这些行数啊,数据源啊都没什么意义
找出加载慢具体慢再哪几步,再去想怎么优化




最慢的应该就是.Designer.cs里面InitializeComponent方法
  • 打赏
  • 举报
回复
假如数据源之间没有依赖关系(比如是上面的统计数据依赖下面的明细数据就不行了),可以考虑只加载上面的控件的数据,那些“看不见”的可以放到后台的异步线程中去加载, 最好弄一个状态栏,显示加载数据的进度,加载完之后再填充到界面中去(类似web中的伸缩内容)
Poopaye 2015-07-21
  • 打赏
  • 举报
回复
你说的这些行数啊,数据源啊都没什么意义 找出加载慢具体慢再哪几步,再去想怎么优化

110,567

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧