如何加快窗体第一次显示的速度

iAaronHua 2015-12-30 11:18:55
加精
窗体第一次打开有明显的卡顿(2秒),之后打开就很快,用户体验不好。 尝试在软件启动时用后台线程先加载常用窗体,希望能提高用户第一次打开窗体的速度,但无效。 尝试在软件启动时用主线程先加载常用窗体,的确能达到效果,但这样一来启动时耗时就太厉害了。 可有其它方法解决这个问题?
...全文
4380 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
daidai_xiaomo 2016-12-20
  • 打赏
  • 举报
回复
窗体在加载的时候是否有数据的读取绑定操作? 如果是这个原因,可以用BackgroundWorker异步处理数据,这样不影响你窗体加载卡顿
班门弄武 2016-11-27
  • 打赏
  • 举报
回复
字体,图标,影响比较明显。
HTControl 2016-01-22
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/391835060 把窗体上乱七八糟的东西全部画到内存DC上, 然后显示时候直接显示内存DC
PaulyJiang 2016-01-12
  • 打赏
  • 举报
回复
测试下主要耗时在哪儿 有针对性的处理
鱼子霸 2016-01-11
  • 打赏
  • 举报
回复
这个方法还是不错的
qq_31718689 2016-01-09
  • 打赏
  • 举报
回复
你们的数据放在哪里的,是客户端还是服务器?我建议首页的数据放在客户端,可以以文本的形式存放
快乐起航2020 2016-01-09
  • 打赏
  • 举报
回复
lang3huan 2016-01-08
  • 打赏
  • 举报
回复
我也有出现这样的问题,但不知道是不是dev的问题导致。 学到了。我也检查下项目试试
qq_24003677 2016-01-08
  • 打赏
  • 举报
回复
海哥功放芳芳楚晨吹芳
叶落无痕0826 2016-01-08
  • 打赏
  • 举报
回复
好高深的感觉,学习了!
gongchihao1 2016-01-08
  • 打赏
  • 举报
回复
mdjs198 2016-01-07
  • 打赏
  • 举报
回复
程序不是很大的话,把窗口上的事务一点点删除,慢慢排查
江南小鱼 2016-01-07
  • 打赏
  • 举报
回复
这帖子也能推荐,撸主的在csdn有人
cdcjk 2016-01-07
  • 打赏
  • 举报
回复
.Net 虚拟机机制的原因。。使用.net的Form和自带控件做一个登录窗口,这样用户双击打开exe的时候基本是秒开,并且在登录窗口shown的时候启动一个后台线程反射加载主窗口。用户还要输入用户名密码,即便保存了用户名密码也要移动鼠标来点击登录按钮。 而在点击登录按钮的时候再次反射加载主窗口,试验下来应该是快很多。 P.S.以前曾使用过楼上说的等待窗口,但是用户体验毕竟不如让程序相应更快。
iAaronHua 2016-01-07
  • 打赏
  • 举报
回复
有没有人再来参与一下这个话题了? 自己顶一下
iAaronHua 2016-01-06
  • 打赏
  • 举报
回复
引用 34 楼 u013421223 的回复:
[quote=引用 32 楼 iAaronHua 的回复:] 多谢楼上这么多位的参与 再次测试了一下,发现是这个界面上某些控件使用了非默认字体风格,改成默认的就快很多。不知道DEV的控件搞什么鬼。 不过我开这个贴的目的是想知道为什么后台线程预加载界面不起效,主线程加载就有效,谢了
当初主窗体显示出来后,客户还未点击该窗体时,预先初始化窗体对象是可行的。 你所说的在后台加载不起效,确认主线程使用的和线程初始化的是不是同一个对象,这样做主线程不用new的。 直接将对象show应该是很快的过程,你也可以测试下、[/quote] 我测试过,其实它不是卡在new的时候,是Show的时候卡。 所以我试了在后台线程实例化这个窗体,甚至调了Show()再关闭,回到主线程第一次打开还是卡。如果直接在主线程打开再关闭就不卡。 所以,现在是搞不清楚为什么后台线程预加载无效,不知道是.net的机制本来就这样,还是Dev的控件才这样? 另外,经过多次测试,发现其实这个应该是DEV9.X的一个BUG,当LabelControl的字体为非默认,特别是字体大小是小数的时候,卡得特别严重。用DEV15.x就不会有这个问题。
七步777 2016-01-05
  • 打赏
  • 举报
回复
引用 32 楼 iAaronHua 的回复:
多谢楼上这么多位的参与 再次测试了一下,发现是这个界面上某些控件使用了非默认字体风格,改成默认的就快很多。不知道DEV的控件搞什么鬼。 不过我开这个贴的目的是想知道为什么后台线程预加载界面不起效,主线程加载就有效,谢了
当初主窗体显示出来后,客户还未点击该窗体时,预先初始化窗体对象是可行的。 你所说的在后台加载不起效,确认主线程使用的和线程初始化的是不是同一个对象,这样做主线程不用new的。 直接将对象show应该是很快的过程,你也可以测试下、
  • 打赏
  • 举报
回复
我也遇到过这个问题,Dev9.2版本的LayoutControl尤其慢。 后来是这样解决的: 使用.net的Form和自带控件做一个登录窗口,这样用户双击打开exe的时候基本是秒开,并且在登录窗口shown的时候启动一个后台线程反射加载主窗口。用户还要输入用户名密码,即便保存了用户名密码也要移动鼠标来点击登录按钮。 而在点击登录按钮的时候再次反射加载主窗口,试验下来应该是快很多。 P.S.以前曾使用过楼上说的等待窗口,但是用户体验毕竟不如让程序相应更快。
exception92 2016-01-04
  • 打赏
  • 举报
回复
Devexpress 控件有一个 SplashScreen 类,可以做一个等待窗口。如果有数据加载的话 待窗口初始化完毕 再填充数据。 https://documentation.devexpress.com/#WindowsForms/CustomDocument10823 第一次加载确实是慢,尚未知道原因。
iAaronHua 2016-01-04
  • 打赏
  • 举报
回复
多谢楼上这么多位的参与 再次测试了一下,发现是这个界面上某些控件使用了非默认字体风格,改成默认的就快很多。不知道DEV的控件搞什么鬼。 不过我开这个贴的目的是想知道为什么后台线程预加载界面不起效,主线程加载就有效,谢了
加载更多回复(26)

110,539

社区成员

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

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

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