您的位置:首页 > 编程语言 > C#

C# 少量字符串链接方法及测试(1)字符串与字符串

2017-04-11 17:05 351 查看

字符串连接方式

str1 + str2

$”{p}” (C#7.0新增)

String.Format

String.Concat

StringBuilder

测试方法

使用每种方法分别连接两个字符串常量和两个字符串变量

使用每种方法分别连接10个字符串常量

循环10000000次并计时

结论

在处理少量字符串链接时,推荐用 + 易读性好,性能损失不大。

Concat 性能最优, $”{p}”与Format 性能最差。。

字符串常量会在编译时链接成一个字符串,字符串变量在运行时链接。

除了+,其他方法使用字符串常量和变量相差很小,可以忽略。

string builder 在固定数量的常量或变量链接时并不占优。

测试结果

测试1 两个字符串

- Plus 1: 47ms

- Plus 2: 697ms

- $”{p}” 1: 3576ms

- Format 1-1: 2866ms

- Format 1-2: 2753ms

- Format 2-1: 3303ms

- Format 2-2: 3271ms

- Concat 1: 502ms

- Concat 2: 423ms

- String builder 1: 994ms

- String builder 2: 902ms

测试2 两个字符串

- Plus 1: 49ms

- Plus 2: 802ms

- $”{p}” 1: 3985ms

- Format 1-1: 3016ms

- Format 1-2: 2911ms

- Format 2-1: 3443ms

- Format 2-2: 3678ms

- Concat 1: 485ms

- Concat 2: 692ms

- String builder 1: 1222ms

- String builder 2: 1251ms

测试3 十个字符串

- Link ten short strings

- Plus 1: 60ms

- Plus 2: 4135ms

- $ 1: 10524ms

- Format 1: 10641ms

- Concat 1: 3614ms

- String builder 1: 5279ms

测试4 十个字符串

- Link ten short strings

- Plus 1: 46ms

- Plus 2: 3939ms

- $ 1: 11097ms

- Format 1: 10589ms

- Concat 1: 3647ms

- String builder 1: 5145ms

Code

var str = "";
var sw = new System.Diagnostics.Stopwatch();

var s1 = "p2 i1:";
var s2 = ", i2:";
sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = s1 + s2;
}

sw.Stop();
Console.WriteLine("Plus 2: " + sw.ElapsedMilliseconds.ToString() + "ms");

s1 = "$1 i1:";
sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = $"{s1}{s2}";
}

sw.Stop();
Console.WriteLine("$ 1: " + sw.ElapsedMilliseconds.ToString() + "ms");

sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = string.Format("f1 i1:{0}", ", i2:");
}

sw.Stop();
Console.WriteLine("Format 1-1: " + sw.ElapsedMilliseconds.ToString() + "ms");

sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = string.Format("f3 i1:{0}", s2);
}

sw.Stop();
Console.WriteLine("Format 1-2: " + sw.ElapsedMilliseconds.ToString() + "ms");

sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = string.Format("{0}{1}", "f2 i1:", ", i2:");
}

sw.Stop();
Console.WriteLine("Format 2-1: " + sw.ElapsedMilliseconds.ToString() + "ms");

s1 = "f4 i1:";
sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = string.Format("{0}{1}", s1, s2);
}

sw.Stop();
Console.WriteLine("Format 2-2: " + sw.ElapsedMilliseconds.ToString() + "ms");

sw.Reset();
sw.S
4000
tart();
for (int i = 0; i < 10000000; i++)
{
str = string.Concat("c1 i1:", ", i2:");
}

sw.Stop();
Console.WriteLine("Concat 1: " + sw.ElapsedMilliseconds.ToString() + "ms");

s1 = "c2 i1:";
sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = string.Concat(s1, s2);
}

sw.Stop();
Console.WriteLine("Concat 2: " + sw.ElapsedMilliseconds.ToString() + "ms");

sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
var builder = new System.Text.StringBuilder();
builder.Append("s1 i1:");
builder.Append(", i2:");
str = builder.ToString();
}

sw.Stop();
Console.WriteLine("String builder 1: " + sw.ElapsedMilliseconds.ToString() + "ms");

s1 = "s2 i1:";
sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
var builder = new System.Text.StringBuilder();
builder.Append(s1);
builder.Append(s2);
str = builder.ToString();
}

sw.Stop();
Console.WriteLine("String builder 2: " + sw.ElapsedMilliseconds.ToString() + "ms");

Console.WriteLine("Link ten short strings");
sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = "p2 i1:" + ", i2:" + ", i3:" + ",i4:" + ", i5:" + ", i6:" + ", i7:" + ", i8:" + ", i9:" + ", i10:";
}

sw.Stop();
Console.WriteLine("Plus 1: " + sw.ElapsedMilliseconds.ToString() + "ms");

s1 = "p2 i1:";
var s3 = ", i3";
var s4 = ", i4";
var s5 = ", i5";
var s6 = ", i6";
var s7 = ", i7";
var s8 = ", i8";
var s9 = ", i9";
var s10 = ", i10";

sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = s1 + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10;
}

sw.Stop();
Console.WriteLine("Plus 2: " + sw.ElapsedMilliseconds.ToString() + "ms");

s1 = "$1 i1:";
sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = $"{s1}{s2}{s3}{s4}{s5}{s6}{s7}{s8}{s9}{s10}";
}

sw.Stop();
Console.WriteLine("$ 1: " + sw.ElapsedMilliseconds.ToString() + "ms");

sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}", "f2 i1:", ", i2:", ", i3:", ",i4:", ", i5:", ", i6:", ", i7:", ", i8:", ", i9:", ", i10:");
}

sw.Stop();
Console.WriteLine("Format 1: " + sw.ElapsedMilliseconds.ToString() + "ms");

sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
str = string.Concat("c1 i1:", ", i2:", ", i3:", ",i4:", ", i5:", ", i6:", ", i7:", ", i8:", ", i9:", ", i10:");
}

sw.Stop();
Console.WriteLine("Concat 1: " + sw.ElapsedMilliseconds.ToString() + "ms");

sw.Reset();
sw.Start();
for (int i = 0; i < 10000000; i++)
{
var builder = new System.Text.StringBuilder();
builder.Append("s1 i1:");
builder.Append(", i2:");
builder.Append(", i3:");
builder.Append(", i4:");
builder.Append(", i5:");
builder.Append(", i6:");
builder.Append(", i7:");
builder.Append(", i8:");
builder.Append(", i9:");
builder.Append(", i10:");
str = builder.ToString();
}

sw.Stop();
Console.WriteLine("String builder 1: " + sw.ElapsedMilliseconds.ToString() + "ms");
Console.ReadKey();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# string link