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# 少量字符串链接方法及测试(2)字符串与值对象
- C# 少量字符串链接方法及测试(3)+=与StringBuilder
- C#判断字符串为空的3种方法性能测试
- c#里把数据库链接字符串写在web.config文件里调用方法
- c#测试字符串是否为GUID的几种方法
- C#基础-055 字符串部分系统方法测试
- c#中分割字符串的几种方法
- C#截取指定长度中英文字符串方法
- 字符串截取固定长度的方法(C#)
- c#中字符串MD5的计算方法
- c#中Split等分割字符串的几种方法(转)
- C#中分割字符串的几种方法
- ASP.NET 2.0中的数据库链接字符串的使用方法
- C#中字符串的格式化及转换成数值的方法
- C#(IsNumeric) 字符串转换为数字的4种方法
- C#截取指定长度中英文字符串方法
- c#中分割字符串的几种方法
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- c#中分割字符串的几种方法
- c#中分割字符串的几种方法