首页 新闻 会员 周边 捐助

C# Winform TabControl 添加控件速度问题

0
悬赏园豆:15 [已解决问题] 解决于 2019-12-26 17:21

有这样一句代码:

this.tabDecl.Controls.Add(this.uclFormalDeclView1);

tabDecl是一个TabPage;

uclFormalDeclView1 是一个用户控件,里边包含了很多的文本框,标签,下拉框等
控件,这样一来导致这个执行非常的慢,加载控件的时候造成界面卡死,要等几十
秒才能加载完毕,速度太慢了,有可以改进的地方吗?

居~的主页 居~ | 初学一级 | 园豆:28
提问于:2019-12-11 20:00
< >
分享
最佳答案
0

加载一个窗口有10多s吗?
是不是逻辑有重复刷新?

收获园豆:8
猝不及防 | 老鸟四级 |园豆:2878 | 2019-12-12 08:43

本机10秒,客户环境30秒+; 没有重复刷新,刷新数据很快,就是加载的控件的时候耗时太长,界面还会(未响应),

居~ | 园豆:28 (初学一级) | 2019-12-12 09:57

@久久婷婷: 感觉不太可能,贴代码看看

猝不及防 | 园豆:2878 (老鸟四级) | 2019-12-12 14:59

@猝不及防:
uclFormalDeclView1 = new uclFormalDeclView();
this.tabDecl.Controls.Clear();
System.Diagnostics.Stopwatch CountStopwatch = new Stopwatch();
CountStopwatch.Start(); // 开始监视代码运行时间
this.tabDecl.Controls.Add(this.uclFormalDeclView1);
CountStopwatch.Stop();
TimeSpan timespan = CountStopwatch.Elapsed; //获取当前实例测量得出的总时间
logger.Error("计时器。加载详细界面总体控件:" + timespan.TotalMilliseconds);

客户端日志:
计时器。加载详细界面总体控件:33318.0336
计时器。加载详细界面总体控件:35573.1982
计时器。加载详细界面总体控件:31018.9395
计时器。加载详细界面总体控件:32268.197

居~ | 园豆:28 (初学一级) | 2019-12-12 15:03

@久久婷婷: vs-调试-性能查看器-应用程序时间线 看一下是否是绘制的时候占用了很多时间

另外看一下cpu和内存,会不会是性能瓶颈了

猝不及防 | 园豆:2878 (老鸟四级) | 2019-12-12 15:24

@猝不及防:

居~ | 园豆:28 (初学一级) | 2019-12-12 16:34

@猝不及防: 我本机一共13秒,加载控件就费了十秒左右。

居~ | 园豆:28 (初学一级) | 2019-12-12 16:35

@久久婷婷: 恐怖如斯,在下是无能为力了,不过我想见试一下这个uclFormalDeclView1长啥样

猝不及防 | 园豆:2878 (老鸟四级) | 2019-12-12 16:45
其他回答(3)
0

是不是你添加数据到这个控件上面时慢

你试一下, 空数据加载看看罗

如果空数据加载这个控件快, 说明是你取数据这慢

就得整理取数据的问题, 如果空数据加载也十几秒, 找这个控件公司相关人士, 看看有没有新版本

收获园豆:7
风浪 | 园豆:2996 (老鸟四级) | 2019-12-13 12:48

原因找到了,我的界面上下拉框太多,将近40个下拉框,绑定了基础数据。我将所有下拉框绑定基础数据的逻辑去掉后,界面几秒钟就出来了,然而这些下拉框的基础数据是不可少的。

支持(0) 反对(0) 居~ | 园豆:28 (初学一级) | 2019-12-13 17:40

@久久婷婷: 用另一线程去取数据呀, 不要让他卡着界面
线程, 线程, 这么慢还得优化数据库, 在查找的字段上面加索引, 加索引,加索引

支持(0) 反对(0) 风浪 | 园豆:2996 (老鸟四级) | 2019-12-16 15:20

@久久婷婷: 把取的数据做成http接口, 所有人打开这个破软件时, 都用http去取得数据, http接口取数据时进行数据缓存, 10秒左右更新一次数据, 这样就快得不能再快了

支持(0) 反对(0) 风浪 | 园豆:2996 (老鸟四级) | 2019-12-16 15:21

@风浪: 基础数据查询在打开软件的时候已经做了,不存在查询数据的问题了,只是绑定的问题。

支持(0) 反对(0) 居~ | 园豆:28 (初学一级) | 2019-12-16 15:22

@久久婷婷: 那用线程去绑定, 不要在主线程上操作, 不然就得卡着界面

支持(0) 反对(0) 风浪 | 园豆:2996 (老鸟四级) | 2019-12-16 15:24

@风浪: 其实也不是绑定慢,界面上绑定很快。绑定之后Add控件的时候慢,

支持(0) 反对(0) 居~ | 园豆:28 (初学一级) | 2019-12-16 15:27
0

其实也不是绑定慢,界面上绑定很快。绑定之后Add控件的时候慢,

解决办法,去掉下拉控件,替换成文本框。

居~ | 园豆:28 (初学一级) | 2019-12-26 17:21
0

可以试试添加Add控件之前,先把容器界面隐藏起来,添加完成以后再显示界面

树欲静·而风不止 | 园豆:83 (初学一级) | 2020-09-11 17:22
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册