如何提高读取数据速度?(100分)

  • 主题发起人 lizhihong158
  • 开始时间
L

lizhihong158

Unregistered / Unconfirmed
GUEST, unregistred user!
1、ListView中有上百万条记录,我试用了几中循环语句逐条读取,
但最快也需要一分钟多一点,请问有什么办法能提高读取速度?
2、ListView中有两列数据,我希望实现第一列数据的字体颜色为[blue]蓝色[/blue],
第二列数据的字体颜色为[red]红色[/red],请问如何实现?
希望各位指点,谢谢!
 
procedure TFrmMain.ListView_SYSCustomDrawSubItem(Sender: TCustomListView;
Item: TListItem;
SubItem: Integer;
State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
///改变颜色
inherited;
DefaultDraw := false;
if ((SubItem) mod 2) = 0 then
begin
TListView(Sender).Canvas.Brush.Color := RGB(224, 224, 224);
//TListView(Sender).Canvas.Font.Color := clred;
end;
DefaultDraw := true;
end;
读取速度 要是查询 就要搞算法,全部读取貌似没好办法
 
刚出差回来,非常感谢zhengrong117的指点!但我用这个方法没能实现按列改变字体
颜色,请zhengrong117和各位再指点一下,谢谢!
 
数据只能保存在内存中,不能全部进入ListView,并且需要采用自画ListView的方式来处理,不然你会忍受不了的。
我的程序就是这样处理的,不光自画Item,还多画了一个CheckBox,见
http://www.mygrep.com/dup/index.htm
 
1、listview 其实可以是一个 view(本身不包含任何数据) 设置 ownerdata 为 True 然后响应 onData 事件:为 Item: TListItem 添加你自己的内容(根据 Item.index),这个即使上千万条记录也是小 case!(以前做过 50 万条记录的,装载时间为 0)
2、响应 onCustomDrawSubItem 事件。比如:
procedure Txxx.DoCustomDrawSubItem(
Sender: TCustomListView;
Item: TListItem;
SubItem: Integer;
State: TCustomDrawState;
var DefaultDraw: Boolean);
begin
with Sender.Canvasdo
if SubItem = 1 then
Font.Color := clRed
else
if SubItem = 2 then
Font.Color := clBlue
else
begin
Font.Color := clGray;
end;
DefaultDraw := True;
end;
 
谢谢LSUPER解答!
我不是要解决装载数据问题,是想提高逐行读取数据的速度,希望大家指教!
谢谢!
 
数据如果没有被装载进入ListView,都保存在自己的内存中的数据结构中,那么又哪里来的速度的问题呢?这个时候的速度问题和ListView好像没有关系了吧?即使需要由ListView来确定要对哪一部分数据进行处理,也不过是利用了一下ListView中的某些行对应的数据结构中的行ID而已,判断一下应该不怎么花时间的吧?
 
装载数据我已解决。
 
用递归应该会有些改善吧,不妨试试。
 

Similar threads

回复
0
查看
821
不得闲
D
回复
0
查看
828
DelphiTeacher的专栏
D
D
回复
0
查看
632
DelphiTeacher的专栏
D
顶部