找回密码
 立即注册

QQ登录

只需一步,快速开始

zheng_hq

银牌会员

151

主题

391

帖子

2227

积分

银牌会员

积分
2227

活字格认证

zheng_hq
银牌会员   /  发表于:2012-9-21 15:59  /   查看:7569  /  回复:6
界面设置了两个c1flexgrid表格

_flex1,  _flex2

_flex1 通过 datatable的方式 绑定显示了 数据库超过 20万行*7列 的数据

用循环语句 _flex2[r + 1, c - 1] = _flex1[r,c]; 的语句,读取数据显示到 _flex2,
速度那是相当的慢,慢得伤不起啊

是我的方法不对,还是什么原因?  谢谢

6 个回复

倒序浏览
iceman
社区贡献组   /  发表于:2012-9-21 17:04:00
沙发
回复 1楼zheng_hq的帖子

效率低分软硬件两个方面:
硬件:和机器的内存、CPU 有关,请问你的机器配置是?
软件:可以优化下你的代码
1.在绑定、添加数据之前添加   this.c1FlexGrid1.SuspendLayout(); 之后 添加    this.c1FlexGrid1.ResumeLayout(); 想必你也知道了。
2.为什么要从 flex1 中取值?从数据库中取会更快。
回复 使用道具 举报
ggggdiu
初级会员   /  发表于:2012-9-22 08:55:00
板凳
20万行,应该考虑分页和筛选啊。
回复 使用道具 举报
zheng_hq
银牌会员   /  发表于:2012-9-24 07:59:00
地板
回复 1楼zheng_hq的帖子

效率低分软硬件两个方面:
硬件:和机器的内存、CPU 有关,请问你的机器配置是?
软件:可以优化下你的代码
1.在绑定、添加数
iceman 发表于 2012-9-21 17:04:00


1.机器硬件配置没有问题,4G内存,也没有恶意程序流氓程序的干扰
2.不会直接从数据库读取数据到单元格的方法,只会_flex.DataSource = dt 的方法,数据库有7列,即便_flex.cols.count = 40,第8~39列也不能用了,所以只好采用_flex1绑定显示,_flex2再读取,因为第8~39列会显示对数据的不同方法计算的结果(这种计算方式不太适合用Sql语句)

3. 采用了:

_flex.SuspendLayout();
//...这里是用循环语句读取数据
_felx.ResumeLayout();

没有任何效果,依然慢

4. c1flexgrid是否有 “虚表”功能?用e.col  e.Row的方式来读取?如何操作呢?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-9-25 11:20:00
5#
回复 4楼zheng_hq的帖子

C1FlexGrid 没有提供虚表功能,不知道你加载数据使用多少时间?你能否发个 Demo 上来我这边测一测。
回复 使用道具 举报
zheng_hq
银牌会员   /  发表于:2012-9-25 16:21:00
6#
回复 4楼zheng_hq的帖子

C1FlexGrid 没有提供虚表功能,不知道你加载数据使用多少时间?你能否发个 Demo 上来我这边测一测。
iceman 发表于 2012-9-25 11:20:00


把我近20万条的数据库放在demo里,有些舍不得

可否,麻烦iceman老师,先在_flex1里随机生成20万行*7列的数据

然后在读取到_flex2
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2012-9-25 18:14:00
7#
回复 6楼zheng_hq的帖子

你的意思是你程序发布后,收集到了 20 万条数据么?
我的测试方法如下,时间为 3377 毫秒:

  1. System.Diagnostics.Stopwatch timer = new System.Diagnostics.Stopwatch();
  2.             timer.Start();
  3.             this.c1FlexGrid1.Rows.Count = 200001;
  4.             this.c1FlexGrid1.Cols.Count = 8;

  5.             Random data = new Random();
  6.             for (int i = 1; i < 200001; i++)
  7.             {
  8.                 this.c1FlexGrid1[i, 0] = i;
  9.                 for (int j = 1; j < 8; j++)
  10.                 {
  11.                     this.c1FlexGrid1[i, j] = data.Next();
  12.                 }
  13.             }

  14.             this.c1FlexGrid2.Rows.Count = 200001;
  15.             this.c1FlexGrid2.Cols.Count = 8;

  16.             for (int r = 1; r < this.c1FlexGrid1.Rows.Count; r++)
  17.             {
  18.                 for (int c = 1; c < this.c1FlexGrid1.Cols.Count; c++)
  19.                 {
  20.                     c1FlexGrid2[r, c] = c1FlexGrid1[r, c];
  21.                 }
  22.             }
  23.             timer.Stop();
  24.             MessageBox.Show(timer.ElapsedMilliseconds.ToString());
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部