C#的StringBuilder 以及string字符串拼接的效率對照


今天公司一個做Unity3d的人在說字符串拼接的一個效率問題,他覺得string拼接會產生新的一個內存空間,假設不及時回收會產生大量的碎片,特別是在Unity3d這樣一個Updata環境下,由於每一幀都會調用,所以假設使用簡單的拼接的話,就會產生非常多碎片,從而影響手機發熱。

他的想法是用StringBuilder去直接改動內存,而不進行一個拼接會更加直接有效的去運行,速度也會更快。

由於認為這個東西有點意思,所以我就想做個對照來看,是不是自己老了記錯了事情,特別是我是做服務端的,效率才是我考慮的,而內存在2014年的今天,難道白菜還不比內存貴?呵呵!

下面是一個簡單的代碼,還有結果圖,我沒什么文化,所以就不繼續說明了,有想法的能夠評論指點一下,謝謝!

    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("1000萬次運算:");
            DateTime dt = DateTime.Now;
            xxx xxx=new xxx();
            const int testNum = 10000000;
            StringBuilder strbuilder = new StringBuilder();
            strbuilder.Append("M");
            for (int i = 0; i < testNum; i++)
            {
                strbuilder.Append(i.ToString(),0,i.ToString().Length);
                xxx.text = strbuilder.ToString();
                strbuilder.Remove(0, strbuilder.Length-1);
            }
            Console.WriteLine("StringBuilder:" + (DateTime.Now - dt).Ticks);
            Console.WriteLine("\r\n");

            strbuilder.Remove(0, strbuilder.Length);
            strbuilder.Clear();
            strbuilder = null;
            dt = DateTime.Now;
            for (int i = 0; i < testNum; i++)
            {
                xxx.text = i+"M";
            }
            Console.WriteLine("String拼接:" + (DateTime.Now - dt).Ticks);
            Console.WriteLine("\r\n");


            dt = DateTime.Now;
            for (int i = 0; i < testNum; i++)
            {
                xxx.text = string.Format("%Sm", i.ToString());
            }
            Console.WriteLine("String.Format拼接:" + (DateTime.Now - dt).Ticks);
            Console.ReadLine();
        }
    }
    public class xxx
    {
        public string text { get; set; }
    }



最后結論就是,簡單的拼接會比不論什么函數和方法來得有效!!歡迎拍磚!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM