首页 新闻 会员 周边

关于winform DataGridView加载大量数据的棘手问题

0
悬赏园豆:10 [已解决问题] 解决于 2015-01-27 16:52

DataGridView为一张40行*40列的表,并且为了能够使整体都显示在一个界面上,每个单元格的数据在加载的时候都需要设置小字号,并根据数据显示不同加载不同的颜色。现在出现了加载速度过慢的现象,发现VirtualMode并不太适合我的需求,求一个加载速度更快的方法,只是思路也行,谢谢~

爱钻牛角尖的程序猿的主页 爱钻牛角尖的程序猿 | 初学一级 | 园豆:4
提问于:2015-01-27 15:30
< >
分享
最佳答案
0

40*40列的数据并不算太多,也还用不上VirtualMode。

1、每列的数据大约多少?是否有某列数据特别多?

2、速度问题是否因为颜色显示造成的?

收获园豆:10
爱编程的大叔 | 高人七级 |园豆:30839 | 2015-01-27 15:51

第一个问题:是40行*40列的表,每个单元格里都是姓名

第二个问题:,调用颜色用的是一个方法,就是

单元格.BackColor = GetColor(int.Parse(Names.Rows[j]["状态"].ToString()));

先谢谢您关注这个问题~。~

爱钻牛角尖的程序猿 | 园豆:4 (初学一级) | 2015-01-27 16:03

@爱钻牛角尖的程序猿: 你没有回答我的问题,

速度问题你要懂得分开看。

1、只加载数据,多少时间。

2、记录一下,每10个单元格或者一个单元格的GetColor这个函数执行的时间。

System.Environment.Tickcount这个函数你会用吧?

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-01-27 16:14

@爱编程的大叔: 

没用过,不过以下是加载颜色的方法,很占时间么?

private Color GetColor(int state)
  {
   Color c = new Color();
   switch (state)
   {
    case 0:
     c = Color.DarkKhaki;
     break;
    case 1:
     c = Color.WhiteSmoke;
     break;
    case 2:
     c = Color.Silver;
     break;
    case 3:
     c = Color.LightGreen;
     break;
    case 4:
     c = Color.Tomato;
     break;
   }
   return c;
  }

爱钻牛角尖的程序猿 | 园豆:4 (初学一级) | 2015-01-27 16:17

@爱编程的大叔: 或者说是不是我在每一步操作的时候都用了很占用时间的方法,所以到最后加载出来数据的时候就很慢?

爱钻牛角尖的程序猿 | 园豆:4 (初学一级) | 2015-01-27 16:20

@爱钻牛角尖的程序猿: 性能分析,最土也是最简单的方法,就是拆成多个过程。

象你这个就是可以把颜色的功能代码先关闭,看看效果。

而这个GetColor也是可以比较容易测出运行时间的。

专业一点的就是运行VS中的性能测试工具。你有空可以找本书或是GOOGLE相关内容学习一下。这个可以测试看出每个函数运行的次数及时间占用比例。

因为不恰当的使用事件,可能导致每个函数重复运行N次。

爱编程的大叔 | 园豆:30839 (高人七级) | 2015-01-27 16:34

@爱编程的大叔: 恩,好吧,我先从代码上开始优化, 尽量做到精简,谢谢

爱钻牛角尖的程序猿 | 园豆:4 (初学一级) | 2015-01-27 16:39

@爱编程的大叔: 如果您允许的话,我想加一下您的QQ。遇到难题的话可以问问您。不强求的。

爱钻牛角尖的程序猿 | 园豆:4 (初学一级) | 2015-01-27 16:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册