ResourceString VS Const用于字符串文字

Ive*_*aev 8 delphi string optimization performance resources

我在Delphi应用程序中有几千个字符串文字.它们已被隔离在一个单独的文件中,并在过去用于本地化.

现在我不再需要本地化了.

与普通常量相比,使用resourcestring是否存在任何性能损失.

我应该改为CONST吗?

Mik*_*son 8

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;
Run Code Online (Sandbox Code Playgroud)

我第一次使用DelphiXE中添加的AQTime来分析这段代码,这是结果.时间列显示Machine Cycles.

来自AQTime的报道

我可能已经做了很多新手错误,但是正如我所看到的那样,const和之间存在差异resourcestring.如果用户的差异明显取决于您对字符串的处理方式.在具有多次迭代的循环中,它可以用于向用户显示信息,而不是用于显示信息.

  • +1因为你使用计时,而不仅仅像其他人一样"猜测".LoadString和FindResourceHInstance API调用不是立即的.这就是为什么我们在我们的[增强RTL](http://synopse.info/forum/viewforum.php?id=6)中为Delphi 7实现LoadResString的增强实现中的内部缓存机制,以及我们的`我们框架的[i18n单元](http://synopse.info/fossil/finfo?name=SQLite3/SQLite3i18n.pas)的资源字符串`自动翻译.正如你所写的那样,在一个循环中,这样的缓存会有所作为!在这样的循环中使用本地临时字符串是一种很好的做法. (3认同)