假设我在C#中有一个stringbuilder可以做到这一点:
StringBuilder sb = new StringBuilder(); string cat = "cat"; sb.Append("the ").Append(cat).(" in the hat"); string s = sb.ToString();
是否会比拥有以下产品效率更高或更有效?
string cat = "cat"; string s = String.Format("The {0} in the hat", cat);
如果是这样,为什么?
编辑
经过一些有趣的回答后,我意识到我可能应该对自己的询问更加清楚。我没有这么多的要求这是在连接字符串更快,但更快 注入 一个串到另一个。
在以上两种情况下,我都希望将一个或多个字符串注入到预定义模板字符串的中间。
对困惑感到抱歉
注意: 此答案是在.NET 2.0是当前版本时编写的。这可能不再适用于更高版本。
String.Format``StringBuilder内部使用:
String.Format``StringBuilder
public static string Format(IFormatProvider provider, string format, params object[] args) { if ((format == null) || (args == null)) { throw new ArgumentNullException((format == null) ? "format" : "args"); } StringBuilder builder = new StringBuilder(format.Length + (args.Length * 8)); builder.AppendFormat(provider, format, args); return builder.ToString(); }
上面的代码是mscorlib的摘录,因此问题变成“ StringBuilder.Append()比StringBuilder.AppendFormat()” 更快?
StringBuilder.Append()
StringBuilder.AppendFormat()
如果没有基准测试,我可能会说,使用可以使上述代码示例运行得更快.Append()。但这是一个猜测,请尝试对这两者进行基准测试和/或性能分析以进行适当的比较。
.Append()
这一章杰里·迪克森(Jerry Dixon)做了一些基准测试:
http://jdixon.dotnetdevelopersjournal.com/string_concatenation_stringbuilder_and_stringformat.htm
更新:
遗憾的是,以上链接自此消失了。但是,“返回机器”上仍然有一个副本:
http://web.archive.org/web/20090417100252/http://jdixon.dotnetdevelopersjournal.com/string_concatenation_stringbuilder_and_stringformat.htm
归根结底,这取决于是否要重复调用字符串格式,即要对100兆字节的文本进行认真的文本处理,还是当用户一次又一次单击按钮时调用它。除非您要执行大量的批处理工作,否则我将坚持使用String.Format,它有助于提高代码的可读性。如果您怀疑性能瓶颈,请在代码上粘贴探查器,然后查看其实际位置。