为什么datagridview加载速度那么慢?如何才能快些?

PBplusMSSQL2008R2 2018-04-08 08:15:58
打开datagridview界面的windows窗口反应很慢,只有70行30列的数据,足足要等9秒钟+。
如果期间需要刷新表格,又要等9秒+,很容易让客户觉得已经死机了。工作效率也低了很多。
以前用其他软件做的1000行的数据也不会超过1秒钟。
C#的datagrid真的无法提高加载/显示速度了???
我这里使用source = datatable的方法, 并且已经打开虚拟了。但是发现打开和不打开没任何区别。(可能有区别,但也是差毫秒级,所以感觉不到。)

谢谢高手们前来解疑。。。
...全文
2240 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
angelmm2008 2018-12-24
  • 打赏
  • 举报
回复
70行30列到不算多。 应该是逻辑上有相互刷新数据代码。在加载数据的过程中,写个计数器,看看被刷新了几次。 还就是SuspendLayout,ResumeLayout用一下,以及设置列的自动列宽,这个在大数据量的情况较耗性能。
  • 打赏
  • 举报
回复
例如,当子线程会去争用 UI 线程来操作控件时,你就不能滥用 Invoke 来阻塞。真正的安全的并发机制总是被初学者看作“反人类”的(因为初学者往往以贪婪和自私当作最棒的天性),这个道理应该想清楚。
  • 打赏
  • 举报
回复
基本上都是滥用并发造成的。比如说应该用 BeginInvoke 的地方而用了 Invoke,比如说应该基于事件捕获的地方而用了 Timer,等等,自己的设计问题。
  • 打赏
  • 举报
回复
同样的我写的软件在WIN7打开比WIN10就快,7用4G内存10用8G内存,你说这算怎么回事?
蒋晟 2018-12-16
  • 打赏
  • 举报
回复 1
>毕竟打开后不刷新的话datagridview上下拖动还是比较柔顺的。 上下拖动还卡就是你的代码有问题了,毕竟最多也就读个十几行,还是从datatable里读,瓶颈是你的内存访问速度,用的时间应该是毫秒级别的。 你一点代码都不贴,哪里错了没法指出来。
  • 打赏
  • 举报
回复
好像还有开QQ开微信
842行15列数据
  • 打赏
  • 举报
回复
当电脑开较多程序在后台时会出现较慢的显示,好像动画似的看到单元格一个一个的显示,确实用了数秒的时间,在W10系统这几天有发现,打开的程序少就没发现。
比如开一个爱奇艺播放器没播放节目,开央视视频有播放,开网页,开休闲游戏迪士尼梦幻王国,开炫动城市,这时再开自己写的软件就会出现数秒的动画式单元格一格一格地显示。
FainSheeg 2018-12-13
  • 打赏
  • 举报
回复
用虚拟模式不可能这么慢的,你有个误区,既然开启了虚拟模式就要去完成CellValueNeeded事件,在事件里去进行单元格的填充,而不是继续去设置Source=dt。你这样继续设置Source就根本没用虚拟模式。虚拟模式不是只要设置一下VirtualMode=True就行了的。
fd34gs3yf 2018-12-13
  • 打赏
  • 举报
回复
可以确定的说DataGridView的性能绝对不会出现这情况,上千条数据都是小事。 对于那些不懂行的人来说,出来什么问题往往都疑神疑鬼,声称发现了xxx重大bug,而且又没有一点调试能力,那么把问题归咎到控件上或者鬼神上,就一点也不奇怪了。
良朋 2018-12-13
  • 打赏
  • 举报
回复
是不是有其它控件冲突干扰了比如TIMER等,把其它的先去掉试试。
修罗本灭世 2018-12-10
  • 打赏
  • 举报
回复 1
column的属性autosizecolumn不能设置为allcells,这样子每插入一行都会遍历一次dg的数据长度,消耗了时间,可以在填充数据之前时设置为none,在填充完之后再设置为allcells

//先设置为none
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
column.AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
}
//填充数据
...........
//再设置为allcells
foreach (DataGridViewColumn column in dataGridView1.Columns)
{
column.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells;
}
必须得开心呀 2018-04-09
  • 打赏
  • 举报
回复
没这么慢,我一次性加载65535个字节到这个控件上,也没有花这么长时间。ps:一个字节占一个单元格。
simaqingtian 2018-04-09
  • 打赏
  • 举报
回复
不可能这么慢,应该是你访问数据库读取数据的时间慢吧
编程有钱人了 2018-04-09
  • 打赏
  • 举报
回复
你所谓的慢是网络传输的速度慢,不是控件展示额时间,如果你读取的是远程数据库的数据,那么慢是网络传输速度慢造成的
正怒月神 2018-04-09
  • 打赏
  • 举报
回复
按照3楼的,查看访问数据库,加载数据逻辑等等每个步骤的耗时。
PBplusMSSQL2008R2 2018-04-09
  • 打赏
  • 举报
回复
引用 7 楼 simaqingtian 的回复:
不可能这么慢,应该是你访问数据库读取数据的时间慢吧
数据库读取很快的,秒读啊。
PBplusMSSQL2008R2 2018-04-09
  • 打赏
  • 举报
回复
引用 1 楼 xian_wwq 的回复:
虚拟模式加载10万笔数据,秒级也就完成了 不可能这么慢的 https://blog.csdn.net/tpriwwq/article/details/14453263
谢谢,我去学习学习。看看如何利用在自己的代码中。
PBplusMSSQL2008R2 2018-04-09
  • 打赏
  • 举报
回复
回复可谓,谢谢各位的回答。 我就是按部就班,创建连接 ==> 创建dataadarpt ==> fill 到dataset ==> 建立一个datatable ==>然后 把这个table作为数据源给datagridview的。 因为是标准格式,所以我就不把这些代码贴上来了,这些代码应该都一样的。区别就是取名不一样。 程序启动很快的,但是只要打开有datagridview的窗口的时候就卡9秒左右。 当然,如果10行以内还算比较快,1秒左右吧。随着行数增加,特别一过70行,就是9秒左右了。 而且,再多行数也是9秒多点,目前只有测到1000行。 为什么呢?我感觉不应该啊。。这么点行就如此卡? 关键是程序在运行中有刷新动作,所以很别扭,如果没刷新动只是read,也就忍了,毕竟打开后不刷新的话datagridview上下拖动还是比较柔顺的。 到底需要加点什么代码才能让load 或者 refresh datagridview快点呢???? 郁闷。。。。。
xuzuning 2018-04-09
  • 打赏
  • 举报
回复
你怎么不说是 数据库到 datatable 耗费时间呢? 打开虚拟方式也不是 VirtualMode = True 这么简单 需要书写事件响应方法,而不是 source = datatable
加载更多回复(4)

110,539

社区成员

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

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

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