易截截图软件、单文件、免安装、纯绿色、仅160KB

Delphi Copy函数效率的问题

技术交流,DH讲解. 最近和肥鸟交流了下关于字符串方面的知识,而这篇文章是很久以前写的,现在发出来吧. 我们写两段代码来对比下:
第一个用Copy函数:
procedure TForm1.Button1Click(Sender: TObject);
var
a,c:Cardinal;
n:Integer;
D:Double;
i:Integer;
b:string;
begin
c:=0;
for n:=0 to 99 do
begin
a:=GetTickCount;
for i:=0 to 999999 do
begin
b:=Copy(s,1,20);
end;
a:=GetTickCount-a;
C:=C+A;
end;
D:=C/100;
Label1.Caption:=FloatToStr(D);
end;
第二个用MoveMemory函数:
procedure TForm1.Button2Click(Sender: TObject);
var
a,c:Cardinal;
n:Integer;
d:Double;
i:Integer;
b:string;
begin
c:=0;
for n:=0 to 99 do
begin
a:=GetTickCount;
for i:=0 to 999999 do
begin
SetLength(b,20);
MoveMemory(@b[1],@s[1],20);
end;
a:=GetTickCount-a;
C:=C+A;
end;
D:=C/100;
Label2.Caption:=FloatToStr(D);
end;
其中:
procedure TForm1.FormCreate(Sender: TObject);
begin
s:='HuangJackyJackyHuang';
end;
看下实验数据:

1用了 264

2用了 169

当然这是在运行了9999900次才看出来的,如果我们把s赋值成一个很长的字符串看看

当字符串s有100个字符,Copy 100个:

1用了266

2用了181

继续 S有200个字符,Copy 200个的情况

1   244

2   186

可以看出来在短字符串的情况下MoveMemory肯定要快一些,后面字符串增长Copy效率没有下降,

但是SetLength + MoveMemory就下降了

最后s有400个字符Copy 400个,但是我把SetLength放在循环外面了,也就是只SetLength一次,也就只比较Copy和MoveMemory这两个了.

1      216

2       89

哈哈今天换在台式机了,所以2个运行时间都减少了很多.

再测试下SetLength在循环体里面的情况 用了147.

这下子我们可以看出来一个SetLength耗了多少资源.
OK,我们看见了这个结果,可是为什么会这样呢?有朋友想了解没有?

要了解就要深入函数内部去:

我们先看1的情况:

Unit1.p


相关文档:

delphi学习 字符串切割问题(split)

最近做一个项目,要用Delphi,以前从未学过,好是费劲啊,哈哈光是字符串切割这个问题就困扰了几个小时,通过查资料终于解决,在这与大家分享一下
Function split(src: pchar; ch: char):TStringList;
// 分割字符串
var
  i: Integer;
  tmp : string;
begin
  Result:=TStringList.Create;
  ......

Delphi线程_TThread代码分析

                                                   ......

在Delphi中如何创建和使用udl文件


方法一:
直接弹出UDL对话框:
use
ADOConed;
  EditConnectionString(ADOQuery1);
方法二:
⑴、右键---新建---文本文档,重命名为 connSet.udl 。
⑵、双击打开 connSet.udl 按提示操作配置数据库,选择本地或远程数据库,配置好后退出。
⑶、使用Delphi 控件TADOConnection连接代码:
  在Form ......

怎样用DELPHI接收摄像头的图象

community.csdn.net/Expert/topic/3423/3423580.xml?temp=.7675897
主  题:  怎样用DELPHI接收摄像头的图象 
作  者:  benbenpear (笨笨) 
等  级:   
信 誉 值:  100 
所属社区:  Delphi GAME,图形处理/多媒体 
问题点数:  0  ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号