程式如果用看的永遠也學不會嘛....所以還是實際上去try一下吧.....

而且這裡只是記錄我看過的用過的東西不見得有人要看.....所以就寫到我自己看的懂就好啦.....

要測試當然要有計時的方式.....

那就是就是System.Diagnostics.Stopwatch來計時

在.cs可以直接在最上面

Using System.Diagnostics;

一般要在字串內容很大時才有很有感覺差很大......要不然應該是不會有什麼感覺。

第一個方式用+的方式:

System.Diagnostics.Stopwatch swa6 = new System.Diagnostics.Stopwatch();
//跑100萬次
int times1 = 1000000;
swa6.Start();
for (int i = 0; i < times1; i++)
  DynamicStr1();
swa6.Stop();
Response.Write("毫秒:" + swa6.ElapsedMilliseconds.ToString() + "
");

public string DynamicStr1()
{
   string str1 = "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest" +
            "thisistestthisistestthisistest";
    return str1;
}

結果:10 毫秒

第二個方式用StringBuilder的Append方式:

System.Diagnostics.Stopwatch swa7 = new System.Diagnostics.Stopwatch();
int times2 = 1000000;
swa7.Start();
for (int i = 0; i < times2; i++)
  DynamicStr2();
swa7.Stop();
Response.Write("毫秒:" + swa7.ElapsedMilliseconds.ToString() + "
");

public string DynamicStr2()
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        sb.Append("thisistestthisistestthisistest");
        return sb.ToString();
    }

結果:4034 毫秒

第三種方式用string+=的方式

System.Diagnostics.Stopwatch swa8 = new System.Diagnostics.Stopwatch();
int times3 = 1000000;
swa8.Start();
for (int i = 0; i < times3; i++)
  DynamicStr3();
swa8.Stop();
Response.Write("毫秒:" + swa8.ElapsedMilliseconds.ToString() + "
");

public string DynamicStr3()
    {
        string str1 = "";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        str1 += "thisistestthisistestthisistest";
        return str1;
    } 

結果:11331毫秒

第一種方式因為一開始就固定長度所以是最快的方式

但是第二及第三種方式如果append或str1的數量愈多就愈有差異

如果把第二跟第三移到只有一個append及+=的字串結果就會是第三種的速度比第二種快了....另快還有一種StringFormat的比較

真的還是用AppendFormat會快於其他二種

參考:

http://msdn.microsoft.com/zh-tw/library/system.text.stringbuilder.aspx

http://www.dotblogs.com.tw/jeff-yeh/archive/2008/11/04/5870.aspx

http://blog.darkthread.net/blogs/darkthreadtw/archive/2007/12/15/stringbuilder-for-static-string-concate.aspx

arrow
arrow
    全站熱搜

    鴨爸 發表在 痞客邦 留言(0) 人氣()