如何处理大型字符串网格?

时间:2011-01-05 01:50:03

标签: delphi

我发现我可能不得不使用少于10列的字符串网格,但大约有5万行。

实验表明它是一个非常反应迟钝的CPU。

任何指针?

代码或组件?

最好是Delphi(7)内置或TMS(我有许可证)或FOSS(用于商业用途)。


更新:请不要只是告诉我使用虚拟树视图等。请告诉我原因,以便我可以学到一些东西。感谢。

4 个答案:

答案 0 :(得分:5)

经常推荐虚拟模式下的TListView组件(我自己没试过,但听起来很容易实现)

答案 1 :(得分:5)

我认为问题不在于将此数字添加到TStringGrid。

添加10万行只需不到1秒(700毫秒)(不是高端PC,只是双核)。

procedure TForm1.btn1Click(Sender: TObject);
Const
  arr : array[1..5] of string = ('One','Two','Three','Four','Five');
  Rows = 100000;
var
  I: Integer;
  F,E : Integer;
begin
  StringGrid1.RowCount := Rows;
  F := GetTickCount;
  for I := 0 to Rows do
  begin
    StringGrid1.Cells[1,I] := Arr[1] + IntToStr(I);
    StringGrid1.Cells[2,I] := Arr[2]+ IntToStr(I);
    StringGrid1.Cells[3,I] := Arr[3]+ IntToStr(I);
    StringGrid1.Cells[4,I] := Arr[4]+ IntToStr(I);
    StringGrid1.Cells[5,I] := Arr[5]+ IntToStr(I);
  end;
  E := GetTickCount;
  ShowMessage(Inttostr(E-F));
end;

我认为您的代码速度慢,是否从数据库中提取数据?如果是这样,这将是您的代码的瓶颈,也为WHATEVER GRID添加50k,以便为名为“不良做法”的用户显示

如果没有显示任何代码,很难告诉你为什么这么慢。

答案 2 :(得分:4)

如果您对虚拟树视图感兴趣,则应从http://code.google.com/p/virtual-treeview/source/checkout签出整个虚拟树视图中继。您将找到Demos \ Advanced子目录,其中Demo应用程序显示虚拟树视图功能,例如如何将虚拟树视图用作网格。

你需要SVN来检查来自googlecode的代码。如果您从未使用过SVN下载并安装TortoiseSVN

答案 3 :(得分:3)

您可能需要查看针对高容量构建的Virtual Treeview: http://www.delphi-gems.com/index.php?option=com_content&task=view&id=12&Itemid=38

相关问题