⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 THashedStringList的性能对比
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,IniFiles, StdCtrls;

type
  TForm1 = class(TForm)
    mmo1: TMemo;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    procedure testTHashStringList;
    procedure testTStringList;
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation
uses DateUtils;
{$R *.dfm}
procedure TForm1.testTHashStringList;
var
    hsl: THashedStringList;
  I: Integer;
  datePointer: TDateTime;
  hslTime, hslTimeC, hslTimeI: Int64;
  tempInt: Integer;
  tempstr: string ;
begin
    hslTime := 0;
    hslTimeC := 0;
    datePointer := Now();
    hsl := THashedStringList.Create();

    for I := 1 to 200000 do
    begin
        hsl.Add('string_'+IntToStr(i));
    end;
    hslTime := MilliSecondsBetween(Now, datePointer);
    mmo1.Lines.Add('200000 项 THashedStringList 创建耗时:'+IntToStr(hslTime)+'毫秒');

    datePointer := Now();
    for I := 0 to 200 do
    begin
        tempInt := hsl.IndexOf('string_'+IntToStr(i*1000));
    end;
    hslTime := MilliSecondsBetween(Now, datePointer);
    mmo1.Lines.Add('200 项字符串搜索 THashedStringList 耗时:'+IntToStr(hslTime)+'毫秒');

    datePointer := Now;
    for I := 1 to 200000 do
    begin
        tempstr := hsl.Strings[i -1];
    end;
    hslTime := MilliSecondsBetween(Now, datePointer);
    mmo1.Lines.Add('200000 项索引搜索 THashedStringList 耗时:'+IntToStr(hslTime)+'毫秒');
    hsl.Clear;

    datePointer := Now;
    for I := 1 to 100000 do
    begin
        hsl.Insert(i-1, 'string_'+IntToStr(i));
    end;
    hslTime := MilliSecondsBetween(Now, datePointer);
    mmo1.Lines.Add('100000 项 THashedStringList 随位置插入耗时:'+IntToStr(hslTime)+'毫秒');

    datePointer := Now;
    for I := 1 to 100000 do
    begin
        hsl.Insert(0, 'string_'+IntToStr(i));
    end;
    hslTime := MilliSecondsBetween(Now, datePointer);
    mmo1.Lines.Add('100000 项 THashedStringList 0位置插入耗时:'+IntToStr(hslTime)+'毫秒');

end;

procedure TForm1.testTStringList;
var
    sl: TStringList;
  I: Integer;
  datePointer: TDateTime;
  slTime, slTimeC, slTimeI: Int64;
  tempInt: Integer;
  tempstr: string ;
begin
    slTime := 0;
    slTimeC := 0;
    datePointer := Now();
    sl := TStringList.Create;
    for I := 1 to 200000 do
    begin
        sl.Add('string_'+IntToStr(i));
    end;
    slTime := MilliSecondsBetween(Now, datePointer);
    mmo1.Lines.Add('200000 项 TStringList 创建耗时:'+IntToStr(slTime)+'毫秒');

    datePointer := Now;
    for I := 0 to 200 do
    begin
        tempInt := sl.IndexOf('string_'+IntToStr(i*1000));
    end;
    slTime := MilliSecondsBetween(Now, datePointer);
    mmo1.Lines.Add('200 项字符串搜索 TStringList 耗时:'+IntToStr(slTime)+'毫秒');

    datePointer := Now;
    for I := 1 to 200000 do
    begin
        tempstr := sl.Strings[i -1];
    end;
    slTime := MilliSecondsBetween(Now, datePointer);
    mmo1.Lines.Add('200000 项索引搜索 TStringList 耗时:'+IntToStr(slTime)+'毫秒');
    
    datePointer := Now;
    for I := 1 to 100000 do
    begin
        sl.Insert(i-1,'string_'+IntToStr(i));
    end;

    slTime := MilliSecondsBetween(Now, datePointer);
    mmo1.Lines.Add('100000 项 TStringList 随位置插入耗时:'+IntToStr(slTime)+'毫秒');

    datePointer := Now;
    for I := 1 to 100000 do
    begin
        sl.Insert(0,'string_'+IntToStr(i));
    end;

    slTime := MilliSecondsBetween(Now, datePointer);
    mmo1.Lines.Add('100000 项 TStringList 0位置插入耗时:'+IntToStr(slTime)+'毫秒');

end;
procedure TForm1.Button1Click(Sender: TObject);
begin
    testTStringList;
    mmo1.Lines.Add('--------------------');
    testTHashStringList;
end;

end.
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -