unit Unit1;interfaceuses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IniFiles;type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    FCacheConfigList: THashedStringlist;
  end;var
  Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
var
  t: Cardinal;
  i: Integer;
begin
  t := GetTickCount;
  for i := 0 to 10000 do
    FCacheConfigList.Add(IntToStr(i + 1));
  FCacheConfigList.Sort;{问题在这里,第一次排序很快,如果再点击一次Button1就排序很耗时,等待大约5分钟以后排序完成,再点击button1就没问题了}
  ShowMessage(IntToStr(GetTickCount - t));
  ShowMessage(IntToStr(FCacheConfigList.Count));
end;procedure TForm1.FormCreate(Sender: TObject);
begin
  FCacheConfigList := THashedStringlist.Create;
end;end.Delphi 2007和Delphi 2010都存在这样的情况,还没有测试TStringList,各位可以试一试

解决方案 »

  1.   

    THashedStringlist 本身在处理大量数据的时候是很慢的,TStringList 要好些,如果数量少的情况下用THashedStringlist ,多的情况下最好用TStringList 。
      

  2.   

    http://topic.csdn.net/u/20090807/08/3420b33a-b030-4b28-91d5-17383e48a6c3.html
      

  3.   

    加一行
    FCacheConfigList.Clear;
      

  4.   

    THashedStringlist;
    TStringlist;
    都有这样的问题应该不是数据量的问题,因为第二次之后数据量比第二次多,第三,第四.....次就不会这么慢了不清楚什么原因
      

  5.   

    FCacheConfigList.Clear;没有执行上面这一句代码的话,每执行一次,数据都会增长,而且有重复键值,所以......