datagridview如何存放大于等于18360000行的数据,且保证界面不卡

必须得开心呀 2017-12-12 05:00:55
大家好!在发布这个帖子之前,我已查阅了相关资料。说是对其进行分页和使用虚拟模式可以满足这一需求。但是还有以下几点不明白的地方,希望有人能为我解惑。
1、在网上找到的关于分页的实例都是从数据库中读取的数据,但是我的数据源来源于udp接口,也就是说,是由另一台电脑发送过来的数据,这里暂设定每1秒发送过来一行数据。所以我想知道,若想实现分页是否必须先将数据存储在数据库中,然后再进行读取数据操作?
2、对于虚拟模式的datagridview,是说它并不是将所有数据都一股脑的全放在该控件上,而是只显示需要的数据。但遗憾的事,网上的实例又是和数据库、表相关的。我很想知道,是否一定得将数据存储在数据库中才能进行操作?
3、如何实现隐藏分页,即在外观看来只是进行了拖动滚动条操作。(这个在网上没有找到)
...全文
379 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
必须得开心呀 2018-01-15
  • 打赏
  • 举报
回复
解决了,隔几秒显示一次,没显示那么快了,谢谢各位了
  • 打赏
  • 举报
回复
引用 3 楼 youarenotme 的回复:
控件显示当前最新数据100行我应该能处理,就是将“旧”的数据删除,刷新。但是,如何在拖动滚动条的时候(查看“旧”的数据的时候,可能查看的是最开始插入的0~100行数据),这个如何操作?如何在拖动滚动条的时候实时刷新数据,在视觉上给人的感觉就是所有的数据都在这个控件里,而不是只有100行数据?请指教。ps:挺急的,希望能尽快答复。
可以搜索图片延迟加载,最主要的是获取可视区域及内容的尺寸进行计算,可以看下这个 不过看你说的你是udp发过来的,又不想存数据库里,那你得把这些数据全部都放到内存里,数据太多内存不够用的话肯定爆掉
神马都能聊 2017-12-15
  • 打赏
  • 举报
回复
不歪楼的讲呢,无视你的需求就问题而言,你可以使用虚拟模式的DataGridView来处理,歪楼来讲,仍然觉得你的需求是不合理的。
  • 打赏
  • 举报
回复
引用 楼主 youarenotme 的回复:
大家好!在发布这个帖子之前,我已查阅了相关资料。说是对其进行分页和使用虚拟模式可以满足这一需求。但是还有以下几点不明白的地方,希望有人能为我解惑。 1、在网上找到的关于分页的实例都是从数据库中读取的数据,但是我的数据源来源于udp接口,也就是说,是由另一台电脑发送过来的数据,这里暂设定每1秒发送过来一行数据。所以我想知道,若想实现分页是否必须先将数据存储在数据库中,然后再进行读取数据操作? 2、对于虚拟模式的datagridview,是说它并不是将所有数据都一股脑的全放在该控件上,而是只显示需要的数据。但遗憾的事,网上的实例又是和数据库、表相关的。我很想知道,是否一定得将数据存储在数据库中才能进行操作? 3、如何实现隐藏分页,即在外观看来只是进行了拖动滚动条操作。(这个在网上没有找到)
单单给你说3,先获取数据量,赋值给滚动条,当数据量小于当前屏幕可显示的grid长度时则自动隐藏滚动条。 (这时候建议获取一份ordered/主键的表) 然后根据滚动条拖动读取对应位置的主键,查找>主键的grid可显示长度的值。 将查找结果填充展示grid。 是的要拆开做没有可以绑定的控件。 这就是个流读取需求,如果你不需要直接跳转指定行还可以用滚动条滚动到最下就load新数据的方法加载。 注意刷新数据后清除不需要的缓存,不然你的程序动着动着就内存炸了。 其他方面的东西,保存建议将修改项目加入一个集合,用集合造表更新数据。 即使是虚拟的数据,你这个数据量太大,建议保存表后处理。
必须得开心呀 2017-12-13
  • 打赏
  • 举报
回复
引用 2 楼 xian_wwq 的回复:
[quote=引用 楼主 youarenotme 的回复:] 大家好!在发布这个帖子之前,我已查阅了相关资料。说是对其进行分页和使用虚拟模式可以满足这一需求。但是还有以下几点不明白的地方,希望有人能为我解惑。 1、在网上找到的关于分页的实例都是从数据库中读取的数据,但是我的数据源来源于udp接口,也就是说,是由另一台电脑发送过来的数据,这里暂设定每1秒发送过来一行数据。所以我想知道,若想实现分页是否必须先将数据存储在数据库中,然后再进行读取数据操作? 2、对于虚拟模式的datagridview,是说它并不是将所有数据都一股脑的全放在该控件上,而是只显示需要的数据。但遗憾的事,网上的实例又是和数据库、表相关的。我很想知道,是否一定得将数据存储在数据库中才能进行操作? 3、如何实现隐藏分页,即在外观看来只是进行了拖动滚动条操作。(这个在网上没有找到)
1.页面显示不需要放那么多,可以根据需要显示,也就是用户在拖动的时候,刷新可视范围内的数据,这样就能保证不卡, 因为可见的最多也就几百条。 2.这么多数据是同时刷新? 每笔数据按照8个字节来算,每秒都快150M了。 3.数据是用来支撑业务的,不管怎么显示,数据肯定要入库, 否则后续怎么使用? 不知道选的什么数据库,如果是关系库,可以考虑批量入库,这样效率高些。 [/quote] 控件显示当前最新数据100行我应该能处理,就是将“旧”的数据删除,刷新。但是,如何在拖动滚动条的时候(查看“旧”的数据的时候,可能查看的是最开始插入的0~100行数据),这个如何操作?如何在拖动滚动条的时候实时刷新数据,在视觉上给人的感觉就是所有的数据都在这个控件里,而不是只有100行数据?请指教。ps:挺急的,希望能尽快答复。
mirrorspace 2017-12-13
  • 打赏
  • 举报
回复
不太明白.就算1千万条都弄来,放到DGV.但没什么用啊.它也最多显示几十条上面条而已,人也看不完. 分页加载,一次多取几页缓存着,人快看完时再加缓存后面的,不会感觉 卡
by_封爱 版主 2017-12-13
  • 打赏
  • 举报
回复
引用 2 楼 xian_wwq 的回复:
1.页面显示不需要放那么多,可以根据需要显示,也就是用户在拖动的时候,刷新可视范围内的数据,这样就能保证不卡, 因为可见的最多也就几百条。 2.这么多数据是同时刷新? 每笔数据按照8个字节来算,每秒都快150M了。 3.数据是用来支撑业务的,不管怎么显示,数据肯定要入库, 否则后续怎么使用? 不知道选的什么数据库,如果是关系库,可以考虑批量入库,这样效率高些。
用过everything吗? 他的listview 读取电脑所有文件 几百万数据不卡.... 随意拖动... 所以需求还是有的... 你别管我数据到底是哪来的或者是最终想要怎样..现在只是显示而已. 就比如说这个需求"listview显示电脑所有的文件名字以及路径(1000W数据左右)"..
cheng2005 2017-12-13
  • 打赏
  • 举报
回复
你上百度随便搜一个热门的关键词,至少有一百万以上的搜索结果,你觉得这一百万以上的结果都缓存在你的本地浏览器里了吗?
xian_wwq 2017-12-12
  • 打赏
  • 举报
回复
引用 楼主 youarenotme 的回复:
大家好!在发布这个帖子之前,我已查阅了相关资料。说是对其进行分页和使用虚拟模式可以满足这一需求。但是还有以下几点不明白的地方,希望有人能为我解惑。 1、在网上找到的关于分页的实例都是从数据库中读取的数据,但是我的数据源来源于udp接口,也就是说,是由另一台电脑发送过来的数据,这里暂设定每1秒发送过来一行数据。所以我想知道,若想实现分页是否必须先将数据存储在数据库中,然后再进行读取数据操作? 2、对于虚拟模式的datagridview,是说它并不是将所有数据都一股脑的全放在该控件上,而是只显示需要的数据。但遗憾的事,网上的实例又是和数据库、表相关的。我很想知道,是否一定得将数据存储在数据库中才能进行操作? 3、如何实现隐藏分页,即在外观看来只是进行了拖动滚动条操作。(这个在网上没有找到)
1.页面显示不需要放那么多,可以根据需要显示,也就是用户在拖动的时候,刷新可视范围内的数据,这样就能保证不卡, 因为可见的最多也就几百条。 2.这么多数据是同时刷新? 每笔数据按照8个字节来算,每秒都快150M了。 3.数据是用来支撑业务的,不管怎么显示,数据肯定要入库, 否则后续怎么使用? 不知道选的什么数据库,如果是关系库,可以考虑批量入库,这样效率高些。
cyg17173 2017-12-12
  • 打赏
  • 举报
回复
又不是及时通讯软件,所以不用说,首先肯定是 数据持久化,UDP 也好,TCP 也好,统统提交保存数据库,至于是保存服务器数据库,还是客户端的sqlite或者firebird,这个看你个人喜好和将来扩展需求。 datagridview 只是个展示工具,没必要放1千8百万行,滚动显示最近的100行即可。

110,536

社区成员

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

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

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