使用StringBuilder进行字符串拼接

7

从资源的角度来看,使用StringBuilder连接两个字符串是否合理?还是有一个最小的连接操作数使StringBuilder更有效?

4个回答

11

1
这个回答真的值得更多的赞,因为在实践中,这正是要遵循的建议:在循环中使用 StringBuilder,对于固定数量的字符串使用 String 类的连接方法。 - Stephen Swensen
确实,它应该是被接受的答案。抱歉,昨天我有点紧张,然后就太快地接受了。 - Heinz K
@Heinz:如果你想的话,应该能够更改已接受的答案。 - Joren
@Joren:是的,我看到了这个,但我觉得这对Giorgi不公平,因为我已经接受了他的答案。 - Heinz K
@Heinz:我认为接受一个次优的答案对于之后来到这个网站寻找答案的任何人都是不公平的。 - Brian

6

对于仅有的两个字符串,使用 + 更易读且效率也同样高。 - Brian

6
使用StringBuilder连接两个字符串并不会带来任何好处,因为结果仍然必须转换为字符串-因此直接连接它们只需要一个分配+两个复制。 StringBuilder不能做得更好-只会使您的代码混乱。

5
如果你正在询问这个问题,那么你可能正在决定使用哪种技术以获得良好的性能。
如果你试图获得良好的性能,那么你可能有一套精心设计的性能测试,清楚地显示了两种不同技术之间的差异,并沿着一组现实、用户关注的性能场景进行测量。
如果你有这样的一套测试,那么为什么要问我们呢?只需以两种方式运行它,看看哪一种给你更好的性能!
如果你没有这样的测试套件,“通过向互联网上的随机人员提问,他们不知道你的客户、你的代码或你的场景,你永远无法从一个慢应用程序中获得良好的性能。” 构建一个精心设计的性能测试套件,允许你“测量”两种技术之间的差异,并将其与一组现实的用户关注的性能目标进行比较。

1
首先,这是出于好奇。我既没有需要精心设计的性能测试套件,因为我的项目实在太小了,也没有必须在连接两个字符串这样的低级领域中优化程序的问题。但是很多人都谈论使用StringBuilder,这让我好奇是否存在一个最小量的平衡点。还有一些不太重要的问题,但如果有提问的平台,为什么不问呢?如果它低于你的水平,那就忽略这个问题。 - Heinz K
1
抱歉,Eric,我不得不在这里给你投反对票:你的回答似乎有点粗鲁,绝对没有帮助。这让人感到惊讶,因为你是C#编译器团队的高级开发人员(我非常尊重的产品)! - Stephen Swensen
Stephen,Eric的回答有什么不礼貌的地方吗?在我看来,他的回答非常准确。如果你没有性能问题,就不要担心StringBuilder,而是要关注编写解决业务问题的可读代码。如果你有性能问题,你必须首先对代码进行分析,然后再处理分析器识别出的热点。没有其他方法。 - SolutionYogi
@Eric 我觉得你在回答SO上的问题时的目标是让提问者(以及其他阅读他的答案的人)成为更好的程序员,而提供答案只是实现这一目标的工具。话虽如此,在这种情况下,我认为你应该复制/粘贴他的其他性能答案来回答这种类型的问题(即“首先将代码编写为可读性高的,然后再考虑效率”)。尽管作为更一般的建议,我更喜欢Yuriy的建议,因为它更相关于这个问题。做正确的事情可以使有经验的程序员更容易阅读代码。 - Brian
2
@Brian:我注意到你自以为知道我的目标和我如何尝试实现它们,这有些傲慢。我并不声称知道你的目标;然而我注意到,如果你能更好地回答问题,那么你可以回答问题的方式是不同的,而不是根据我假定的动机来分析我的技术。没有人会阻止你! - Eric Lippert
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接