201804042231->stringbuilder的基礎用法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace StringBulider
{
    class Program
    {
        /*
         * StringBulider:
         * 1.添加
         * 2.移除
         * 3.插入
         * 4.代替
         * 
         * StringBulider比String好處在於動態處理字符,無需開新空間
         * 但是StringBulider缺點是線程不安全
         */
        static void Main(string[] args)
        {
            //StringBulider的用法


            //StringBulider的Append用法
            StringBuilder bulider = new StringBuilder("2222");
            bulider.Append(new char[] { 'a', 'b', 'c', 'd' }, 1, 2);//將一個字符數組的開始下標與結束下標中包含的所有元素按順序一一添加到stringbulider後邊
            Console.WriteLine(bulider.ToString());
            //StringBulider的AppendFormat用法
            StringBuilder builder2 = new StringBuilder("3333");
            builder2.AppendFormat("{0},{1}", "a2223", "b2224");//將一組格式化字符串添加到stringbuilder末尾
            Console.WriteLine(builder2.ToString());
            //StringBulider的Insert用法
            StringBuilder builder3 = new StringBuilder("aaaa");
            builder3.Insert(2,"爾");
            Console.WriteLine(builder3.ToString());
            //StringBulider的移除用法
            StringBuilder builder4 = new StringBuilder("qq11");
            builder4.Remove(1, 3);
            Console.WriteLine(builder4.ToString());//字符串刪除,這裏需要注意字符串刪除的話指明下標要記得避免越界
            //StringBulider的替換用法
            StringBuilder builder5 = new StringBuilder("yyyy");
            builder5.Replace('y', 'w', 1, 3);
            Console.WriteLine(builder5.ToString());//字符串替換,這裏仍然要注意越界問題


            //傳說中string動態修改的速度比不上stringbuilder,這裏我自己手碼一下
            Console.WriteLine("string>>");
            DateTime stringTime = DateTime.Now;
            DateTime stringendTime;
            string value = "1";
            for (int i = 0; i < 50000; i++)
            {
                value += i;//這裏string動態修改的方法會新開內存,產生gc,所以這裏用了2s多
            }
            stringendTime = DateTime.Now;
            Console.WriteLine((stringendTime - stringTime).TotalSeconds);
            Console.WriteLine("stringbuilder>>");
            stringTime = DateTime.Now;
            StringBuilder builders = new StringBuilder("1");
            for (int i = 0; i < 50000; i++)
            {
                builders.Append(i);//這裏則用了0.01秒不夠,足足比string快了n倍
            }
            stringendTime = DateTime.Now;
            Console.WriteLine((stringendTime - stringTime).TotalSeconds);
            /*
             * 本人不才
             * 
             * 沒有將stringbuilder的線程安全將其演繹出來
             * 
             * 所以這個坑留到多線程裏邊解答
             * 
             */
            Console.ReadKey();
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章