TStringList性能调优

来源:互联网 发布:个人可以在淘宝开店吗 编辑:程序博客网 时间:2024/06/05 12:54

     改进目标是针对IndexOf效率,主要有两面:

    1、设置Sorted属性

          当Sorted= true,那么IndexOf则会调用Find二分查找法;当Sorted=False,则会从头比到尾,直至找到。

           显然,Sorted = True可以取得较好的性能。

     2、改进Find方法

          IndexOf依赖于Find,Find调用API:AnsiCompareStr。这个API会考虑本地化语言因素,以及用户态和系统态的频繁切换,较耗CPU的。

type
  TStringListEnhanced = class(TStringList)
public function Find(const S: string; var Index: Integer): Boolean; override; end;

function TStringListEnhanced.Find(const S: string; var Index: Integer): Boolean;var  L, H, I, C: Integer;begin  Result := False;  L := 0;  H := Count - 1;  while L <= H do  begin    I := (L + H) shr 1;    C := CompareStr(Get(I), S);    if C < 0 then L := I + 1 else    begin      H := I - 1;      if C = 0 then      begin        Result := True;        if Duplicates <> dupAccept then L := I;      end;    end;  end;  Index := L;end;



原创粉丝点击