熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

三種字符串加法運算的效率問題

2013-11-13 09:59:20  來源: .NET編程 

    using System;  
 
using SystemText;  
 
namespace ConsoleApplication  
 
{  
 
    class Program  
 
    {  
 
        private const int loopTimes = ;  
 
        static void Main(string[] args)  
 
        {  
 
            string str = stringEmpty;  
 
            string str = stringEmpty;  
 
            StringBuilder sb = new StringBuilder();  
 
            DateTime timeStart = DateTimeNow;  
 
            for (int i = ; i < loopTimes; i++)  
 
            {  
 
                str += iToString();  
 
                str += iToString();  
 
                str += iToString();  
 
            }  
 
            ConsoleWriteLine(stringFormat(字符串直接做加法運行{}次的時間是:{} loopTimes DateTimeNowSubtract(timeStart)));  
 
            timeStart = DateTimeNow;  
 
            for (int i = ; i < loopTimes; i++)  
 
            {  
 
                str += stringFormat({}{}{} i i i);  
 
            }  
 
            ConsoleWriteLine(stringFormat(字符串format運行{}次的時間是:{} loopTimes DateTimeNowSubtract(timeStart)));  
 
            timeStart = DateTimeNow;  
 
            for (int i = ; i < loopTimes; i++)  
 
            {  
 
                sbAppend(i);  
 
                sbAppend(i);  
 
                sbAppend(i);  
 
            }  
 
            ConsoleWriteLine(stringFormat(stringbuilder運行{}次的時間是:{} loopTimes DateTimeNowSubtract(timeStart)));  
 
        }  
 
    }  
 
}    字符串直接做加法運行次的時間是::: 字符串format運行次的時間是::: stringbuilder運行次的時間是:::

  字符串直接做加法運行次的時間是::: 字符串format運行次的時間是::: stringbuilder運行次的時間是:::

  從上面的兩次循環可以看出來

  字符串直接做加法相當於的n次方(每一次加法都會留下一個副本) 字符串format相當於(的n次方)/X (X >= && X <=) (format方法每次只留下一個副本不管裡面有幾個參數   注 :  最多只能有個參數) stringbuilder相當於n * (從始至終都只有本身)

  看了上面稍微業余點的說明相信大家明白了為什麼技術主管在抽查代碼的時候看到一堆的字符串加法會火冒三丈了吧(而且這些副本的銷毀是有GC控制的時間不能確定所以短時間進行了海量的字符串加法運算內存會爆掉的)所以技術主管罵人也就可以理解了:  一方面是效率問題令一方面是內存消耗在此之外技術主管也看到了你本身的令一個問題:你根本就是一個垃圾代碼的制造者!

  結論:如果是少量的加法運算可以使用StringFormat()如果是類似循環的加法運算別想了肯定是StringBuilderAppend()


From:http://tw.wingwit.com/Article/program/net/201311/12210.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.