在C#中更高效的内存:选项#1或选项#2?正在使用StringBuilder删除方法比在循环中创建新的StringBuilder更有效率吗?
public void TestStringBuilder()
{
//potentially a collection with several hundred items:
string[] outputStrings = new string[] { "test1", "test2", "test3" };
//Option #1
StringBuilder formattedOutput = new StringBuilder();
foreach (string outputString in outputStrings)
{
formattedOutput.Append("prefix ");
formattedOutput.Append(outputString);
formattedOutput.Append(" postfix");
string output = formattedOutput.ToString();
ExistingOutputMethodThatOnlyTakesAString(output);
//Clear existing string to make ready for next iteration:
formattedOutput.Remove(0, output.Length);
}
//Option #2
foreach (string outputString in outputStrings)
{
StringBuilder formattedOutputInsideALoop = new StringBuilder();
formattedOutputInsideALoop.Append("prefix ");
formattedOutputInsideALoop.Append(outputString);
formattedOutputInsideALoop.Append(" postfix");
ExistingOutputMethodThatOnlyTakesAString(
formattedOutputInsideALoop.ToString());
}
}
private void ExistingOutputMethodThatOnlyTakesAString(string output)
{
//This method actually writes out to a file.
System.Console.WriteLine(output);
}
难道string.Concat( “前缀”,outputString, “后缀”)会比这两个选项快? – configurator 2009-03-05 21:21:06
是的,在这种情况下 - 但我把这个问题当作一个给定的StringBuilder来使用(例如,在所有这些之前,在实际代码中都有一个附加循环)。 – 2009-03-05 23:17:41
为什么要“拷贝”?我们所要做的就是清除字符串。 – 2009-08-25 09:36:41