可能重复:
String vs StringBuilder
我刚刚回顾了一些我曾经拿过VB.NET的书。我不确定我是否已经掌握了这一点,了解StringBuilder是如何/是什么。
使用指南是什么?如果要连接2个字符串或50个字符串,最好使用它吗?
或者当字符串总长度大于128个字符时?
或者,只要您使用它来将字符串添加到一起,您会看到性能优势吗?
在哪种情况下使用StringBuilder实例构建SQL语句比string.format("Select * from x where y = {0}",1)
更好?
总是让我感到震惊的是,声明另一个变量并包含名称空间对小字符串连接不利,但我现在不确定。
很抱歉,很多文档都会告诉您使用什么,而不是最好的。
答案 0 :(得分:36)
我有一个article on this very topic。总之(从页面底部复制):
答案 1 :(得分:13)
这是我的经验法则:
StringBuilder
最好在编译时未知确切的连接数时使用。
答案 2 :(得分:3)
Coding Horror有一篇关于这个问题的好文章, The Sad Tragedy of Micro-Optimization Theater 。
答案 3 :(得分:0)
我个人使用StringBuilder时,我不仅要连接一个或两个字符串。我不确定是否有真正的性能提升,但我总是阅读并被告知,每次执行时,使用多个字符串进行常规连接会创建一个额外的字符串副本,而使用StringBuilder时会保留一个复制,直到你调用最终的ToString()
方法。
答案 4 :(得分:0)
有人在实验中发现关键数字是6.连续超过6个连接,你应该使用StringBuilder。不记得我在哪里找到了这个。
但请注意,如果你只是写一行:
"qwert" + "yuiop" + "asdf" + "gh" + "jkl;" + "zxcv" + "bnm" + ",."
它被转换为一个函数调用(我不知道如何在VB.net中编写它)
String.Concat("qwert", "yuiop", "asdf", "gh", "jkl;", "zxcv", "bnm", ",.");
因此,如果你在一行上进行所有连接,那么不要打扰StringBuilder,因为String.Concat有效地将一次性完成所有连接。只有当你在循环中或连续连接时才这样做。
答案 5 :(得分:0)
我的规则 - 当您在For或Foreach循环中添加字符串时,请使用StringBuilder。