WinForm里如何一次性加载大量数据?

原则1、不能分页原则2、加载1W条数据,一次性加载到UI上,除去从数据库取数据的时间,控制在0.5S以内。原则3、UI线程不能因为一次性加载数据量过大而卡死。类似同花顺、... 原则1、不能分页
原则2、加载1W条数据,一次性加载到UI上,除去从数据库取数据的时间,控制在0.5S以内。
原则3、UI线程不能因为一次性加载数据量过大而卡死。

类似同花顺、大智慧等股票软件,在程序加载的时候,如何做到几万支股票铺到界面上,而程序不会卡死?
所以,这里分页是不现实的。
另外,退一步讲,就算数据在本地,如何一次性铺到界面上6W条数据而不会使程序卡顿?
展开
 我来答
宇宙之心眼
2013-06-21 · TA获得超过623个赞
知道小有建树答主
回答量:610
采纳率:100%
帮助的人:410万
展开全部

不知道你的重画操作是如何处理的

一般来讲,你这5W条记录其实也并不多,如果缓存数据做的挺好,查询起来也就那么回事,并且还不怎么占内存。

 

而对于重画,我不知道你是不是需要在UI上进行绘图,如果是需要绘图,那么

  1. 你需要进行双缓冲处理

  2. 你只需要绘可视区域

  3. 你可以使用多线程,一方面进行数据的准备工作,另外一方面进行UI的绘制工作

更多追问追答
追问
1、2都实现了。
因为一开始我用的dataviewgrid直接绑定,那样主线程都会卡死,后来改成开子线程,不用绑定方法,而是一条一条的填充数据。只是这样倒是实现SQL Server Management Studio那种效果了,但是很慢6000条数据就要自己加载很久,虽然他感觉不出卡顿,用的多线程
从数据传输到本地解析完成大概用了0.8s,但是这样用线程铺数据到界面上完全铺完这些数据,大概用了6秒!
追答
我不太清楚你需要做的内容。如果你只是单纯想做一个表格的话,我建议你这样处理,你虽说是不能进行分页,但你的窗口可视部分的行数其实你是可以计算出来的,那么也就是说,你只需要绑定窗口可视部分的行数,而不需要一次性绑6000多,也就那么几十条就很快就出来了。当滚动条进行滚动的时候,再执行重新计算。
之所以说要用多线程做好准备,也就是当你滚动到一个区域的时候,你先计算好滚动条向上或向下滚动后应当显示的内容,这样的话,你就只需要直接取出已准备好的内容重绘即可,而不需要再耐心地去单线程计算可视内容了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
紫色浪漫眼
2013-06-21 · TA获得超过247个赞
知道小有建树答主
回答量:577
采纳率:100%
帮助的人:143万
展开全部
首先1,不用分页,服务器受不了,也没有人那么做,客户端也不允许,该程序也不会有人用。
首先2,一次性加载,那我不小心开启了该软件,有关掉,这资源多浪费。你的软件是不是一个人用?
更多追问追答
追问
数据做了集群,不会有问题的,现在主要的问题是在本地程序加载这些已有的数据的时候,主界面会卡。
所以说,假设数据在本地,怎么处理能使得这些数据迅速加载。刨除序列化反序列化的时间,5W条数据最好能控制在0.5S以内。
你看SQL Server Management Studio查询数据的时候就明白了。
追答
5W条也是需要SQL来建立查询的,而winform是间接查询数据的,调用很多DLL,需要多于的很多资源和性能,跟SQL直接查询时不一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式