是String.Format和StringBuilder一样有效
假设我在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
内部使用:
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()
” 更快?
如果没有基准测试,我可能会说,使用可以使上述代码示例运行得更快.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,它有助于提高代码的可读性。如果您怀疑性能瓶颈,请在代码上粘贴探查器,然后查看其实际位置。
以上是 是String.Format和StringBuilder一样有效 的全部内容, 来源链接: utcz.com/qa/412620.html