字符串连接 执行效率
C#处理字符串可以使用:
string
StringBuilder
目前网上很多的观点:
1、StringBuilder在处理字符串上比string快;
2、在编程的过程中尽可能的不要使用string 的+运算;
3、对于大文本来说,尽可能的使用StringBuilder;
为了验证这些观点,我做了如下测试:
第一次:测试(32长度)短字符串的 +法运算 与StringBuilder AppendFormat对比
测试方法:不断的对一个string(StringBuilder )变量进行重新赋值;
代码如下:
[csharp]
for (int step = 0; step < 3; step++)
{
Console.WriteLine("string 100000 加测试:");
Stopwatch sw = new Stopwatch();
sw.Start();
string str_1 = string.Empty;
for (int i = 0; i < 100000; i++)
{
str_1 = i.ToString() + Guid.NewGuid();
}
sw.Stop();
Console.WriteLine("\t消耗时间:{0}", sw.ElapsedMilliseconds);
Console.WriteLine("StringBuilder AppendFormat 100000 测试:");
sw.Reset();
sw.Start();
StringBuilder str_2 = new StringBuilder(string.Empty);
for (int i = 0; i < 100000; i++)
{
str_2.Clear();
str_2.AppendFormat("{0}{1}", i.ToString(), Guid.NewGuid());
}
sw.Stop();
Console.WriteLine("\t消耗时间:{0}", sw.ElapsedMilliseconds);
}
运行结果:
测试结果(个人认为):
1、对于小字符串的处理(不断赋值),string + 法运算,执行效率更高;
2、但是StringBuilder的AppendFormat方法执行实现似乎更加稳定;
第二次:测试长字符串的 +法运算 与StringBuilder AppendFormat对比
与第一次的变化:
第一次是不断对原变量赋值,第二次为不断的在原变量值上累加。
(为了执行快点,我将循环的次数降低到了10000)
代码:
[csharp]
for (int step = 0; step < 3; step++)
{
Console.WriteLine("string 10000 加测试:");
Stopwatch sw = new Stopwatch();
sw.Start();
string str_1 = string.Empty;
for (int i = 0; i < 10000; i++)
{
<strong><u>str_1 += i.ToString() + Guid.NewGuid();</u></strong>
}
sw.Stop();
Console.WriteLine("\t消耗时间:{0}", sw.ElapsedMilliseconds);
Console.WriteLine("StringBuilder AppendFormat 10000测试:");
sw.Reset();
sw.Start();
StringBuilder str_2 = new StringBuilder(string.Empty);
for (int i = 0; i < 10000; i++)
{
<strong><u>//str_2.Clear();
str_2.AppendFormat("{0}{1}", i.ToString(), Guid.NewGuid());</u></strong>
}
sw.Stop();
Console.WriteLine("\t消耗时间:{0}", sw.ElapsedMilliseconds);
}
运行结果:
测试结果:
在字符串连接运算上,string的执行效率明显比不上StringBuilder
作者:ymchinabye
补充:Web开发 , ASP.Net ,