sin*_*ino -1 c# performance stringbuilder
根据以下单元测试方法,StringBuilder远比String.Replace慢,为什么每个人都说StringBuilder更快?我错过了什么吗?
[TestMethod]
public void StringReplace()
{
DateTime date = DateTime.Now;
string template = File.ReadAllText("file.txt");
for (int i = 0; i < 100000; i++)
{
template = template.Replace("cat", "book" );
template = template.Replace("book", "cat");
}
Assert.Fail((DateTime.Now - date).Milliseconds.ToString());
}
[TestMethod]
public void StringBuilder()
{
DateTime date = DateTime.Now;
StringBuilder template = new StringBuilder(File.ReadAllText("file.txt"));
for (int i = 0; i < 100000; i++)
{
template.Replace("cat", "book");
template.Replace("book", "cat");
}
Assert.Fail((DateTime.Now - date).Milliseconds.ToString());
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
StringReplace - 335ms
StringBuilder - 799ms
StringBuilder在构建字符串方面更快.更换是一个不同的问题.
例如,以下示例代码:
[TestMethod]
public void StringConcat()
{
var start = DateTime.Now;
var s = string.Empty;
for (int i = 0; i < 100000; i++)
{
s += "cat";
}
Assert.Fail((DateTime.Now - start).TotalMilliseconds.ToString());
}
[TestMethod]
public void StringBuilder()
{
var start = DateTime.Now;
var sb = new StringBuilder();
for (int i = 0; i < 100000; i++)
{
sb.Append("cat");
}
Assert.Fail((DateTime.Now - start).TotalMilliseconds.ToString());
}
Run Code Online (Sandbox Code Playgroud)
对我来说,我分别得到14,645毫秒(14.6秒)和2毫秒.