Delphi编程里的Pos与MyPos速度测试

减小字体 增大字体 作者:万一  来源:万一的博客  发布时间:2010-11-13 13:12:40

如果 Pos 函数的第一个参数是 Char 而非 String, 那么编译器也会先把 Char 转换为 String;
从内存结构到管理机制, String 远比 Char 要复杂.
因此, 面对这种情况(要定位的是 Char) Pos 还有优化的余地; 优化后速度会提升 5 倍左右.
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//自定义的 Pos 函数
function MyPos(c: Char; const str: string): Integer;
var
  i: Integer;
begin
  Result := 0;
  for i := 1 to Length(str) do
    if c = str[i] then begin Result := i; Exit end;
end;

{对比测试}
procedure TForm1.Button1Click(Sender: TObject);
var
  s: string;
  c: Char;
  i: Integer;
  n: Cardinal;
begin
  s := 'abcdefghijklmnopqrstuvwxyz';
  Randomize;
  c := Chr(Random(26) + 97); {随机一个 a..z 的字符}

  {用 Pos 函数}
  n := GetTickCount;
  for i := 1 to 1000000 do Pos(c,s);
  n := GetTickCount - n;
  Text := IntToStr(n) + ' - ';

  {用自定义的 MyPos 函数}
  n := GetTickCount;
  for i := 1 to 1000000 do MyPos(c,s);
  n := GetTickCount - n;
  Text := Text + IntToStr(n);

  Button1.Caption := 'Pos 与 MyPos 速度测试';
end;

end.

运行后效果对比图:

Tags:

作者:万一
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论

广告位置B