当前位置:编程学习 > asp >>

字符串连接 执行效率

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 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,