测试1
- Link strings by +=
- Total 10
- 1 += 0ms
- 2 StringBuilder 0ms
- Total 100
- 1 += 0ms
- 2 StringBuilder 0ms
- Total 1000
- 1 += 13ms
- 2 StringBuilder 0ms
- Total 10000
- 1 += 301ms
- 2 StringBuilder 2ms
- Total 100000
- 1 += 69806ms
- 2 StringBuilder 21ms测试2
- Link strings by +=
- Total 10
- 1 += 0ms
- 2 StringBuilder 0ms
- Total 100
- 1 += 0ms
- 2 StringBuilder 0ms
- Total 1000
- 1 += 11ms
- 2 StringBuilder 0ms
- Total 10000
- 1 += 166ms
- 2 StringBuilder 1ms
- Total 100000
- 1 += 43162ms
- 2 StringBuilder 12ms测试3
- String builder with default creator: 1895ms
- String builder with capacity creator: 535ms
- String builder with default creator: 1823ms
- String builder with capacity creator: 577ms
var str = "+= i:0";
var sw = new System.Diagnostics.Stopwatch();
Console.WriteLine("Link strings by +=");
for (var total = 10; total < 1000000; total *= 10)
{
Console.WriteLine("Total " + total.ToString());
sw.Reset();
sw.Start();
for (int i = 1; i < total; i++)
{
str += ", i:" + i.ToString();
}
sw.Stop();
Console.WriteLine("1 += " + sw.ElapsedMilliseconds.ToString() + "ms");
var builder = new System.Text.StringBuilder();
builder.Append("+= i:0");
sw.Reset();
sw.Start();
for (int i = 1; i < total; i++)
{
builder.Append(", i:");
builder.Append(i.ToString());
}
str = builder.ToString();
sw.Stop();
Console.WriteLine("2 StringBuilder " + sw.ElapsedMilliseconds.ToString() + "ms");
var sw = new System.Diagnostics.Stopwatch();
sw.Reset();
sw.Start();
for (var total = 10; total < 10000000; total++)
{
var builder = new System.Text.StringBuilder(); // 默认为缓冲16
builder.Append("string 1, length : 21"); // 创建32的缓冲区,并把原来的copy过来
builder.Append("string 2, length : 21"); // 创建64的缓冲区,并把原来的copy过来
}
sw.Stop();
Console.WriteLine("String builder with default creator: " + sw.ElapsedMilliseconds.ToString() + "ms");
sw.Reset();
sw.Start();
for (var total = 10; total < 10000000; total++)
{
var builder = new System.Text.StringBuilder(64); // 直接创建64的缓冲区
builder.Append("string 1, length : 21");
builder.Append("string 2, length : 21");
}
sw.Stop();
Console.WriteLine("String builder with capacity creator: " + sw.ElapsedMilliseconds.ToString() + "ms");