加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

编译器是否优化字符串连接?

发布时间: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';

串联在运行时执行.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读