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()连接WideStringa WideString(和System._UStrCat()for UnicodeString)的函数.如果CodeGear/Embarcadero更聪明,它们可能实现了System._WStrCat()一个带有UnicodeString输入和WideString输出的重载(反之亦然,WideString将a 连接到a UnicodeString).这样,UnicodeString就不再需要临时转换了.这两个WideString和UnicodeString被编码为UTF-16(以及大部分,但我不会进入,在这里),所以串联在一起仅仅是一个单一的分配和移动的事情,连接两个时一样UnicodeString秒或2个WideString小号在一起.
| 归档时间: |
|
| 查看次数: |
1383 次 |
| 最近记录: |