【发布时间】:2022-11-16 06:13:33
【问题描述】:
我在 Delphi XE2 中工作,我必须制作一个复杂的函数,有时会复制较长的字符串部分,有时只会复制字符。这取决于源字符串的内容。所以问题是哪个示例方法更快?
Len := Length(Str);
SetLength(Result, Len);
for I := 1 to Len do Result[I] := Str[I];
Len := Length(Str);
SetLength(Result, Len);
Move(Str[1], Result[1], Len * SizeOf(Char));
我也很好奇运行时间的差异有多大。
【问题讨论】:
-
我不确定我做对了。如果
Str是源字符串并且您说“复制...字符串的一部分”,我希望开始和结束字符索引。您提供的两个示例很容易由您自己测试,您也可以与简单的分配进行比较:Result := Str,因为这就是您的示例所做的。会很有趣的您的结果。 -
@Tom Brunberg 这些只是例子。大多数时候我不必只复制整个字符串的一部分。这就是为什么我没有写“Result := Str;”
-
那么,为什么您要编写示例代码来完成您通常不做的事情呢? :) 我建议您自己进行计时测试。如果结果出乎意料,那么您可以返回实际有意义的代码、示例数据和您的计时结果,以评估可能的原因以及如何改进。
-
@TomBrunberg 我问这个问题是因为我希望其他人对这些不同的方法有更多的了解(复制一系列单独的字符与使用 Move 过程),这样他们就可以给我建议应该使用哪种方法。
-
不确定这是否有帮助,但有一个网站致力于寻找更快的 Delphi RTL 例程替代方案 (Delphi Fastcode)。它有点过时,但应该仍然有效。
标签: performance delphi