请问Length(S) = 0和S=''那个更快?(200分)

  • 主题发起人 主题发起人 prim
  • 开始时间 开始时间
[red] 楼上全错!是一样快的,自己用个99999999999的循环测一下就知道了。[/red]
 
我赞成 白河愁 的说法
to com:我试过了,代码如下:
procedure TForm1.Button1Click(Sender: TObject);
const
CMAX = 999999999;
var
i : DWORD;
StartTime, UseTime : DWORD;
s : String;
begin
s := '';
Button1.Enabled := False;
StartTime := GetTickCount();
for i := 0 to CMAX do begin
if s = '' then;
end;
UseTime := GetTickCount() - StartTime;
Label1.Caption := IntToStr(UseTime);
Application.ProcessMessages();
StartTime := GetTickCount();
for i := 0 to CMAX do begin
if Length(s) = 0 then;
end;
UseTime := GetTickCount() - StartTime;
Label2.Caption := IntToStr(UseTime);

Button1.Enabled := True;
end;
结果第一个是:4927,第二个是:22192,明显是s=''快,不知你是怎么测的?
 
大家说完了,我怎么呢?分分
 
其实要解决length()不等于0 的问题应该可以通过S[0]=0;来解决不过有一个
问题就是这样的结果会造成已经分配的空间没有被释放!同样是不安全![:D]
 
这里所有的人都看懂问题了,除了那个叫什么战鹰的小子。
好好看看题目在回答问题,别让人笑话。
 
不好意思,借一点地盘。
战鹰, 没上MSN啊?想请教你问题呢。
另,套套近乎:我是你们“那旮旯”理工大学毕业的。
 
//并没有说安全啊!很多快速的方法就是通过牺牲安全性来实现的!
也不能这样说,任何时候,安全都是最重要的。就算当时没有出事,但是很可能就埋下了
安全隐患,这类的虫子,到了以后是很难捉的。

//其实要解决length()不等于0 的问题应该可以通过S[0]=0;
这样只对 ShortString 有用,对 AnsiString 则是错误的。
 
to Sindbad
用EMAIL吧,最近比较忙,没时间在网上泡!
to 一个过客
我的贴子中心思想是对题的!
 
s=nil不是更加安全吗?
建议用 s=nil 清空字符串。
 
后退
顶部