Rod*_*ddy 5 delphi unicode-string widestring
我很好奇Delphi 2010中这段代码会发生什么:
function foo: WideString;
var
myUnicodeString: UnicodeString;
begin
for i:=1 to 1000 do
begin
myUnicodeString := ... something ...;
result := result + myUnicodeString; // This is where I'm interested
end;
end;
Run Code Online (Sandbox Code Playgroud)
涉及多少字符串转换,是否有任何特别糟糕的性能?
我知道该函数应该只返回一个UnicodeString
,但我在VCL流代码中看到了这种反模式,并希望了解该过程.
要回答关于代码实际执行的问题,请使用以下语句:
result := result + myUnicodeString;
Run Code Online (Sandbox Code Playgroud)
以下是:
调用System._UStrFromWStr()
转换Result
为临时UnicodeString
调用System._UStrCat()
连接myUnicodeString
到temp
调用System._WStrFromUStr()
将temp转换为a WideString
并将其分配回来Result
.
有一个System._WStrCat()
连接WideString
a WideString
(和System._UStrCat()
for UnicodeString
)的函数.如果CodeGear/Embarcadero更聪明,它们可能实现了System._WStrCat()
一个带有UnicodeString
输入和WideString
输出的重载(反之亦然,WideString
将a 连接到a UnicodeString
).这样,UnicodeString
就不再需要临时转换了.这两个WideString
和UnicodeString
被编码为UTF-16(以及大部分,但我不会进入,在这里),所以串联在一起仅仅是一个单一的分配和移动的事情,连接两个时一样UnicodeString
秒或2个WideString
小号在一起.