Jer*_*dge 4 delphi string concatenation compiler-optimization delphi-xe2
我在我的代码中有一些情况,我正在构建一个大的文本字符串,例如复杂的SQL语句.我打算将这个文本连续多次放在一起,每个都有一些略有不同的参数.我习惯使用一个名为just的子程序,procedure A(const S: String);
它只是将text(S
)附加到较大的字符串中Text := Text + S + #10 + #13;
我想知道这是否会阻碍性能而不是使用传统的字符串连接?我开始认为编译器优化了这样的东西:
Text := 'some' + ' ' + 'text' + ' ' + 'and' + ' ' + 'such';
Run Code Online (Sandbox Code Playgroud)
至
Text := 'some text and such';
Run Code Online (Sandbox Code Playgroud)
这是真的?编译器是否优化了这种情况?如果是这样,我可能会决定将所有内容更改为以下内容:
Text := 'select something from sometable st'+#10+#13+
'join someothertable sot on sot.id = st.sotid'+#10+#13+
'where sot.somevalue = 1'+#10+#13+
'order by sot.sorting';
Run Code Online (Sandbox Code Playgroud)
理论上这会比这更快吗?
Text:= Text + 'select something from sometable st'+#10+#13;
Text:= Text + 'join someothertable sot on sot.id = st.sotid'+#10+#13;
Text:= Text + 'where sot.somevalue = 1'+#10+#13;
Text:= Text + 'order by sot.sorting';
Run Code Online (Sandbox Code Playgroud)
或者我通常如何做到:
A('select something from sometable st');
A('join someothertable sot on sot.id = st.sotid');
A('where sot.somevalue = 1');
A('order by sot.sorting');
Run Code Online (Sandbox Code Playgroud)
一个表达式
'a' + 'b'
Run Code Online (Sandbox Code Playgroud)
在编译时进行评估.这意味着一项任务
str := 'a' + 'b';
Run Code Online (Sandbox Code Playgroud)
导致相同的编译代码
str := 'ab';
Run Code Online (Sandbox Code Playgroud)
另一方面,为
str := 'a';
str := str + 'b';
Run Code Online (Sandbox Code Playgroud)
串联在运行时执行.