StringBuilder,两种语法之间的差异

时间:2011-06-06 12:26:28

标签: c# performance stringbuilder

之间是否存在差异:

StringBuilder requete = new StringBuilder();
requete.Append(" INSERT into " + listeLibelleTable[index] + " ( ");

StringBuilder requete = new StringBuilder();
requete.Append(" INSERT into ");
requete.Append(listeLibelleTable[index]);
requete.Append(" ( ");

当我说“差异”时,我的意思是在性能方面,如果这个代码在循环中,例如。

我认为这些行

requete.Append(" INSERT into " + listeLibelleTable[index] + " ( ");

在编译时解决,所以它不应该对性能产生任何影响,但我不确定

4 个答案:

答案 0 :(得分:4)

除非listeLibelleTable[index]确实可以在编译时解决(我非常怀疑),使用字符串连接似乎对StringBuilder的使用起反作用。

在你的第二个例子中,你是连接一个字符串然后附加它而不是附加到StringBuilder

在任何一种情况下,您都应该使用AppendFormat来提高可读性:

requete.AppendFormat(" INSERT into {0} ( ", listeLibelleTable[index]);

答案 1 :(得分:1)

您的第一个代码是执行连接,构建一个完整的字符串,然后将其附加到StringBuilder。假设你还要附加其他东西,第二种形式可能会快一点......它不需要临时字符串和连接部分的结果。

另一方面,如果您正在执行数据库操作,那么差异将是无法估量的。

答案 2 :(得分:0)

我想这样做:

" INSERT into " + listeLibelleTable[index] + " ( "

使用更多内存来存储concat操作的结果!

答案 3 :(得分:0)

字符串连接将创建新的String对象并复制现有值,并配置旧字符串。表明它会很慢。 检查http://kaioa.com/node/59以获取参考