<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      我不知道的C#—字符串池機制

      22:29:27 字符串具有值類型的特點對字符串,對同一個字符串大量修改或者對多個引用賦值同一個字符串對象時會產生大量的臨時字符串對象,影響性能,但是CLR為我們做了一些工作來消除這些弊端。
           對同一個字符串大量修改的問題可以使用StringBulid來解決這個問題,看看下面這個例子:

        private string item = "string";
        public void TestStringBuild()
        {
         long sbStart = DateTime.Now.Ticks;
         UseStrigBuilder(1000);
         long sbEnd = DateTime.Now.Ticks;
         Console.WriteLine("使用StringBuilder消耗時間: "+(sbEnd-sbStart).ToString());
         long strStart = DateTime.Now.Ticks;
         UseString(1000);
         long strEnd = DateTime.Now.Ticks;
         Console.WriteLine("使用String消耗時間:"+(strEnd-strStart).ToString());

        }
        public string UseStrigBuilder(int number)
        {
         StringBuilder sb = new StringBuilder();
         for(int i = 0; i < number; i++)
         {
          sb.Append(item);
          
         }
         sb.Remove(sb.Length-1 , 1);
         return sb.ToString();
        }
        public string UseString(int number)
        {
         string result = "";
         for(int i = 0; i < number; i++)
         {
          result += item;
         }
         return result;
        }
      輸出結果為
          
      注:DateTime.Now.Ticks:此屬性的值表示自 0001 年 1 月 1 日午夜 12:00:00 以來已經過的時間的以 100 毫微秒為間隔的間隔數。
      就是說這1000次循環如果使用StringBuilder的話節省了15625000毫秒的時間。
            第二個問題,對多個引用賦值同一個字符串對象,CLR的解決方法更加巧妙。在默認情況下CLR會使用字符串池的機制,CLR啟動的時候,在內部創建一個容器,它以鍵值對的形式存在,鍵值是字符串對象內容,值是字符串在托管堆上的引用,當一個新的字符串對象創建的時候CLR檢查在這些值中是否已經存在這個字符串對象,如果已經存在就返回對應的值,也就是在托管堆中的引用,如果不存在就在這個容器中中開辟空間存放這個字符串,返回在他的引用。
            這里還是用一段代碼來說明:
        public void StringPoolTest()
        {
         string str1 = "789";
         string str2 = "789";
         Console.WriteLine(Object.ReferenceEquals(str1 , str2));
         string str3 = "7" + "8" + "9";
         Console.WriteLine(Object.ReferenceEquals(str1, str3));
         char[] chars = new char[] { '7', '8', '9' };
         string str4 = new string(chars);
         Console.WriteLine(object.ReferenceEquals(str1 , str4));
        }
      輸出結果:

      前兩次都輸出true說明str1和str2都指向同一個堆引用,最后一個輸出false是因為它使用new關鍵字進行內存分配,字符串池機制不起作用。
      這里注意string str3 = "7" + "8" + "9";這個語句在正常的情況下只分配了一次內存,這個也是CLR的優化,在這里就沒有分配內存了,因為str1這里已經分配好了。

      posted @ 2009-09-06 23:43  nd  閱讀(2345)  評論(5)    收藏  舉報
      主站蜘蛛池模板: ww污污污网站在线看com| 亚洲香蕉免费有线视频| 99RE6在线观看国产精品 | 欧美xxxx做受欧美.88| 97午夜理论电影影院| 无码人妻斩一区二区三区| 免费大片黄国产在线观看| 国产在线自拍一区二区三区| 国产一级r片内射免费视频| 久久a级片| 精品国产免费一区二区三区香蕉 | 色欲久久久天天天综合网精品| 国产精品午夜福利免费看| 中文字幕亚洲资源网久久| 日韩人妻无码精品无码中文字幕 | 国产亚洲欧美在线观看三区| 水富县| 欧美日韩人人模人人爽人人喊| 人妻少妇精品中文字幕| 凤山市| 无码伊人久久大杳蕉中文无码| 野外做受三级视频| 东京一本一道一二三区| 天堂av网一区二区三区| 黑人巨大精品oideo| 国产午夜在线观看视频播放| 99午夜精品亚洲一区二区| 国产高清一区二区三区视频| 亚洲国产女性内射第一区| 亚洲av男人电影天堂热app| 亚洲男同志网站| 在线观看中文字幕国产码| 中文国产成人久久精品小说| 国产精品中文字幕久久| 天堂va欧美ⅴa亚洲va在线| 资源在线观看视频一区二区| 黄色国产精品一区二区三区| 蜜芽久久人人超碰爱香蕉| 国产免费高清69式视频在线观看 | 国产亚洲精品成人av在线| 国精品无码一区二区三区在线|