编译器是否优化字符串连接?
发布时间:2020-12-15 09:36:34 所属栏目:大数据 来源:网络整理
导读:我在我的代码中有一些情况,我正在构建一个大的文本字符串,例如复杂的SQL语句.我打算将这个文本连续多次放在一起,每个都有一些略有不同的参数.我养成了使用一个名为程序A(const S:String)的子程序的习惯;它只是将文本(S)附加到较大的字符串Text:= Text S#10
我在我的代码中有一些情况,我正在构建一个大的文本字符串,例如复杂的SQL语句.我打算将这个文本连续多次放在一起,每个都有一些略有不同的参数.我养成了使用一个名为程序A(const S:String)的子程序的习惯;它只是将文本(S)附加到较大的字符串Text:= Text S#10#13;
我想知道这是否会阻碍性能而不是使用传统的字符串连接?我开始认为编译器优化了这样的东西: Text := 'some' + ' ' + 'text' + ' ' + 'and' + ' ' + 'such'; 至 Text := 'some text and such'; 这是真的?编译器是否优化了这种情况?如果是这样,我可能会决定将所有内容更改为以下内容: 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'; 理论上这会比这更快吗? 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'; 或者我通常如何做到: 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'); 解决方法
一个表达式
'a' + 'b' 在编译时进行评估.这意味着一项任务 str := 'a' + 'b'; 导致相同的编译代码 str := 'ab'; 另一方面,为 str := 'a'; str := str + 'b'; 串联在运行时执行. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |