winform窗体内控件绘制缓慢

a569673493 2015-08-12 04:46:09
我是用C#写的winform程序,现在发现弹出窗体的时候,窗体里面的子控件不能一次性绘完成,要慢慢的用鼠标移动上去才能一个个出来,电脑本身的性能是不错的,然后第二次打开的时候就没有上述问题了,请问下这是什么原因?如何解决啊?
...全文
359 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
_lee_chong 2015-08-13
  • 打赏
  • 举报
回复
2,如果是因为窗口在呈现时主线程有占用cpu的代码,那么尽量将代码移到子线程
_lee_chong 2015-08-13
  • 打赏
  • 举报
回复
我晕搞错了,还以为是楼主用的反射。。。
_lee_chong 2015-08-13
  • 打赏
  • 举报
回复
2,如果是因为窗口在呈现时主线程有占用cpu的代码,那么尽量将代码移到子线程
衣舞晨风 2015-08-13
  • 打赏
  • 举报
回复
引用 8 楼 lc316546079 的回复:
[quote=引用 7 楼 xunzaosiyecao 的回复:] [quote=引用 5 楼 lc316546079 的回复:] [quote=引用 2 楼 xunzaosiyecao 的回复:] 具体情况具体分析吧 绘制是否可以异步处理?
通常绘制肯定是不能异步的,而且他说的是button,这不像是自己绘制的问题[/quote] 是不是使用反射来创建了?[/quote] 。。。你在窗体加载的时候用了反射?反射性能很低的[/quote] 我们现在在做表单设计器,初始化的时候,就用了反射, 我们的需求是把表单设置的所有信息属性都保存下来,于是用来xml,用了反射
_lee_chong 2015-08-13
  • 打赏
  • 举报
回复
引用 7 楼 xunzaosiyecao 的回复:
[quote=引用 5 楼 lc316546079 的回复:] [quote=引用 2 楼 xunzaosiyecao 的回复:] 具体情况具体分析吧 绘制是否可以异步处理?
通常绘制肯定是不能异步的,而且他说的是button,这不像是自己绘制的问题[/quote] 是不是使用反射来创建了?[/quote] 。。。你在窗体加载的时候用了反射?反射性能很低的
衣舞晨风 2015-08-13
  • 打赏
  • 举报
回复
引用 5 楼 lc316546079 的回复:
[quote=引用 2 楼 xunzaosiyecao 的回复:] 具体情况具体分析吧 绘制是否可以异步处理?
通常绘制肯定是不能异步的,而且他说的是button,这不像是自己绘制的问题[/quote] 是不是使用反射来创建了?
衣舞晨风 2015-08-13
  • 打赏
  • 举报
回复
引用 5 楼 lc316546079 的回复:
[quote=引用 2 楼 xunzaosiyecao 的回复:] 具体情况具体分析吧 绘制是否可以异步处理?
通常绘制肯定是不能异步的,而且他说的是button,这不像是自己绘制的问题[/quote] 是不是使用反射来创建了?
_lee_chong 2015-08-13
  • 打赏
  • 举报
回复
引用 2 楼 xunzaosiyecao 的回复:
具体情况具体分析吧 绘制是否可以异步处理?
通常绘制肯定是不能异步的,而且他说的是button,这不像是自己绘制的问题
a569673493 2015-08-13
  • 打赏
  • 举报
回复
引用 楼主 a569673493 的回复:
我是用C#写的winform程序,现在发现弹出窗体的时候,窗体里面的子控件不能一次性绘完成,要慢慢的用鼠标移动上去才能一个个出来,电脑本身的性能是不错的,然后第二次打开的时候就没有上述问题了,请问下这是什么原因?如何解决啊?
我窗体设计包括所有的控件都是用的devexpress,除了主界面加载比较慢,另外主界面中根据菜单弹出的子窗体显示也有问题,主界面是上面的控件一个个的出现,但是最终会都显示,但是弹出的子窗体,第一次显示总是不能显示出来,例如窗体上一个button,必须要用鼠标移动到button的位置后,button才能出来,但是奇怪的是只要窗体弹出过一次,第二次弹出,就正常了,本身这些子窗体也不是很复杂。
a569673493 2015-08-13
  • 打赏
  • 举报
回复
引用 楼主 a569673493 的回复:
我是用C#写的winform程序,现在发现弹出窗体的时候,窗体里面的子控件不能一次性绘完成,要慢慢的用鼠标移动上去才能一个个出来,电脑本身的性能是不错的,然后第二次打开的时候就没有上述问题了,请问下这是什么原因?如何解决啊?
哥们可否留个QQ,方便的话,可以私聊请教你嘛?
衣舞晨风 2015-08-13
  • 打赏
  • 举报
回复
引用 13 楼 Z65443344 的回复:
[quote=引用 9 楼 xunzaosiyecao 的回复:] [quote=引用 8 楼 lc316546079 的回复:] [quote=引用 7 楼 xunzaosiyecao 的回复:] [quote=引用 5 楼 lc316546079 的回复:] [quote=引用 2 楼 xunzaosiyecao 的回复:] 具体情况具体分析吧 绘制是否可以异步处理?
通常绘制肯定是不能异步的,而且他说的是button,这不像是自己绘制的问题[/quote] 是不是使用反射来创建了?[/quote] 。。。你在窗体加载的时候用了反射?反射性能很低的[/quote] 我们现在在做表单设计器,初始化的时候,就用了反射, 我们的需求是把表单设置的所有信息属性都保存下来,于是用来xml,用了反射[/quote] 是谁告诉你用xml就必须用反射的 你完全可以先反序列化xml,变成实体类,然后直接操作实体类,而不是反射操作实体类[/quote] his.LoaderHost.CreateComponent 我们用的是上面这个,不过性能一般,有什么更好的吗?
衣舞晨风 2015-08-13
  • 打赏
  • 举报
回复
引用 13 楼 Z65443344 的回复:
[quote=引用 9 楼 xunzaosiyecao 的回复:] [quote=引用 8 楼 lc316546079 的回复:] [quote=引用 7 楼 xunzaosiyecao 的回复:] [quote=引用 5 楼 lc316546079 的回复:] [quote=引用 2 楼 xunzaosiyecao 的回复:] 具体情况具体分析吧 绘制是否可以异步处理?
通常绘制肯定是不能异步的,而且他说的是button,这不像是自己绘制的问题[/quote] 是不是使用反射来创建了?[/quote] 。。。你在窗体加载的时候用了反射?反射性能很低的[/quote] 我们现在在做表单设计器,初始化的时候,就用了反射, 我们的需求是把表单设置的所有信息属性都保存下来,于是用来xml,用了反射[/quote] 是谁告诉你用xml就必须用反射的 你完全可以先反序列化xml,变成实体类,然后直接操作实体类,而不是反射操作实体类[/quote] 是的 我们就是通过序列化来实例化的,是通过反射调用的方法的,对不起 说错了
_lee_chong 2015-08-13
  • 打赏
  • 举报
回复
如果实在无法优化,那就挡起来,搞个panel把窗口遮住,完全初始化了再隐藏pannel
a569673493 2015-08-13
  • 打赏
  • 举报
回复
首先我没有用反射,也没有用其他鸡肋的方式,我用的是最简单的方法,控件也都dev express自带的控件
於黾 2015-08-13
  • 打赏
  • 举报
回复
引用 9 楼 xunzaosiyecao 的回复:
[quote=引用 8 楼 lc316546079 的回复:] [quote=引用 7 楼 xunzaosiyecao 的回复:] [quote=引用 5 楼 lc316546079 的回复:] [quote=引用 2 楼 xunzaosiyecao 的回复:] 具体情况具体分析吧 绘制是否可以异步处理?
通常绘制肯定是不能异步的,而且他说的是button,这不像是自己绘制的问题[/quote] 是不是使用反射来创建了?[/quote] 。。。你在窗体加载的时候用了反射?反射性能很低的[/quote] 我们现在在做表单设计器,初始化的时候,就用了反射, 我们的需求是把表单设置的所有信息属性都保存下来,于是用来xml,用了反射[/quote] 是谁告诉你用xml就必须用反射的 你完全可以先反序列化xml,变成实体类,然后直接操作实体类,而不是反射操作实体类
衣舞晨风 2015-08-12
  • 打赏
  • 举报
回复
具体情况具体分析吧 绘制是否可以异步处理?
_lee_chong 2015-08-12
  • 打赏
  • 举报
回复
winform界面性能优化呀。。。这个要视情况而定呢。。。 首先看你慢的原因, 1,如果窗体上控件本身并不多且没有绘制复杂的窗口且主线程在呈现的时候没有占用cpu的操作,那么有可能是没开双缓冲,将form以及form中的一些容器(panel gridview等)开双缓冲 2,如果是因为窗口在呈现时主线程有占用cpu的代码,那么尽量将代码移到子线程 3,如果是因为窗口控件过多过复杂,那么考虑在设计时分成多个窗口, 4,如果是因为第2点的原因 或者 第3点原因,又不愿意修改设计,可以考虑在窗口呈现时,在整个窗口上铺一个panel上面搞张图片显示“正在加载”等等,挡住控件的初始化过程,以此提高用户体验

110,537

社区成员

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

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

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