如何快速的导入几万条数据到stringgrid或者 tsgrid(100分)

  • 主题发起人 主题发起人 okgxsh
  • 开始时间 开始时间
O

okgxsh

Unregistered / Unconfirmed
GUEST, unregistred user!
如何快速的导入几万条数据到stringgrid或者 tsgrid
现在
把txt几万行数据读取到内存,然后一条一条显示到stringgrid或者 tsgrid
几万条数据,显示起来比较慢!,有什么快速方法没有?
 
现象:无论有多少数据,每屏显示的行数总是有限的
所以可以用分页来处理
比如每页100条数据
这样加载和显示就很快
还节省内存

提供三个按钮,上一页,下一页,确定(后面留个Edit填入页数)
既然是TXT保存数据,那么一定是格式化的
所以可以用几乎恒定的速度定位行数
所以显示会很快
 
Grid只是用来显示的话,根本用不着往里面写任何数据的——只要在它的DrawCell事件中
根据行列的值,到内存中定位到数据所在,然后“画出来”即可:

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
MyStr:String;
begin
MyStr:=GetData(ARow,ACol); //你自己的数据定位函数
StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,MyStr);
end;

这样一来,只要数据读入了内存,就可以利用 StringGrid1.Update; 来激活单元格的绘
制过程,从而高效的显示数据——看得见多少格就显示多少格,绝不浪费:)
 
在添加行之前先调beginupdate(不知道stringgrid是不是也叫这个方法,不过应该有类似的方法),添加完再调endupdate,你会发现快很多,因为它不用每添加一行就重画一次,而是读完再一次重画
 
一下把那么多内容读入内存,机器受得了吗.建议用文件缓存
 
不能用分页,因为每次导入10万条数据后,要分别分段要处理的!
beginupdate 也是慢,
 
面对现实,放弃一次完整导入的想法吧,用绘制事件。
 
建议采用文件缓存
从文件上面来进行分段的读取
内存毕竟是有限的
 
creation-zy,这个答案绝对OK~~
 
Virtual Treeview好像對這些大數據量顯示蠻快的,你可以嘗試一下。。。
 

Similar threads

S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部