这个问题已经在这里有了答案:
已关闭10年。
以下两个选项之间有什么区别(性能和内存使用情况)?
选项1:
StringBuilder msgEntry = new StringBuilder();
msgEntry.AppendLine("<" + timeTag + ">" + timeStamp + "</" + timeTag + ">");
选项2:
StringBuilder msgEntry = new StringBuilder();
msgEntry.Append("<");
msgEntry.Append(timeTag);
msgEntry.Append(">");
msgEntry.Append(timeStamp);
msgEntry.Append("</");
msgEntry.Append(timeTag );
msgEntry.Append(">\n");
最佳答案
第二个在内存使用方面可能稍好一点,因为它不需要计算中间字符串1 ...但是它的可读性较差,IMO。
我个人会使用:
msgEntry.AppendFormat("<{0}>{1}</{0}>", timeTag, timeStamp);
之后,您还没有显示想要使用
StringBuilder
做什么。如果您只是要将其转换为字符串,那么我将使用:string text = string.Format("<{0}>{1}</{0}>", timeTag, timeStamp);
首先。
表现如何?好吧,可能更糟-毕竟,它必须解析格式字符串。但是,除非您已对此进行了度量,并发现它是瓶颈,否则您为什么担心?
一般来说:
1或要传递给
Concat
的数组...我们不知道timeStamp
的类型,因此我们无法确切知道那里发生了什么。在第二种形式中,它可以就地添加,而第一种形式中,可能需要将其装箱,然后在执行串联之前将其转换为字符串。在.NET 3.5和.NET 4之间,重新分配等的确切实现可能发生了变化(我知道实现的某些内容已经实现)。如果没有非常仔细的基准测试,我会真的不愿意说出哪个更快……但是可读性更容易调用,尽管从主观上讲。