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

Maw*_*awg 5 delphi

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

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

有什么指针吗?

代码或组件?

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


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

mjn*_*mjn 5

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


Moh*_*man 5

我不认为问题来自于将此数字添加到TStringGrid.

添加100k行只需不到1秒(700ms)(不是高端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;
Run Code Online (Sandbox Code Playgroud)

我认为你的代码很慢,你从数据库带来了数据吗?如果是这样,这将是您的代码的瓶颈,也向WHATEVER GRID添加50k,以便为名为"Bad practice"的用户显示.

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