我有一个 Delphi 应用程序中的数千个字符串字面量。它们已经被隔离在一个单独的文件中,以前用于本地化。
现在我不再需要本地化。
使用 resourcestring 与普通常量相比是否会有性能损失?
我应该将它们更改为 CONST 吗?
我有一个 Delphi 应用程序中的数千个字符串字面量。它们已经被隔离在一个单独的文件中,以前用于本地化。
现在我不再需要本地化。
使用 resourcestring 与普通常量相比是否会有性能损失?
我应该将它们更改为 CONST 吗?
使用const字符串将调用_UStrLAsg
,资源字符串最终在LoadResString
中加载。
由于问题涉及速度,因此没有什么比进行测试更好的了。
resourcestring
str2 = 'str2';
const
str1 = 'str1';
function ConstStr1: string;
begin
result := str1;
end;
function ReceStr1: string;
begin
result := str2;
end;
function ConstStr2: string;
begin
result := str1;
end;
function ReceStr2: string;
begin
result := str2;
end;
procedure Test;
var
s1, s2, s3, s4: string;
begin
s1 := ConstStr1;
s2 := ReceStr1;
s3 := ConstStr2;
s4 := ReceStr2;
end;
既然它们存储在一个单独的文件中,而且可能没有做其他事情(干得好!),那么尝试一下也没有什么理由不去尝试。我预测这对性能不会有任何明显的影响,但我想这取决于你的应用程序还在做些什么。
资源字符串确实会产生额外的开销。
与显示此类字符串或将其写入文件或数据库相比,开销并不大。
另一方面,这只是从resourcestring
切换到const
关键字(如果您考虑再次进行本地化,则可以切换回来)。
resourcestring
自动翻译中也进行了缓存。正如你所说,在循环中,这种缓存确实起到作用!在这样的循环中使用本地临时字符串是一个好习惯。 - Arnaud Bouchez