一区二区久久-一区二区三区www-一区二区三区久久-一区二区三区久久精品-麻豆国产一区二区在线观看-麻豆国产视频

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問(wèn)題思考

系列文章導(dǎo)航:

[你必須知道的.NET] 開(kāi)篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對(duì)抽象編程:接口和抽象類(lèi)

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來(lái)居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關(guān)鍵字---把new說(shuō)透

[你必須知道的.NET] 第六回:深入淺出關(guān)鍵字---base和this

[你必須知道的.NET] 第七回:品味類(lèi)型---從通用類(lèi)型系統(tǒng)開(kāi)始

[你必須知道的.NET] 第八回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(上)-內(nèi)存有理

[你必須知道的.NET] 第九回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(中)-規(guī)則無(wú)邊

[你必須知道的.NET] 第十回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(下)-應(yīng)用征途

[你必須知道的.NET] 第十一回:參數(shù)之惑---傳遞的藝術(shù)(上)

[你必須知道的.NET] 第十二回:參數(shù)之惑---傳遞的藝術(shù)(下)

[你必須知道的.NET] 第十三回:從Hello, world開(kāi)始認(rèn)識(shí)IL

[你必須知道的.NET] 第十四回:認(rèn)識(shí)IL代碼---從開(kāi)始到現(xiàn)在

[你必須知道的.NET] 第十五回:繼承本質(zhì)論

[你必須知道的.NET] 第十六回:深入淺出關(guān)鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫(xiě)和重載

[你必須知道的.NET] 第十八回:對(duì)象創(chuàng)建始末(上)

[你必須知道的.NET] 第十九回:對(duì)象創(chuàng)建始末(下)

[你必須知道的.NET]第二十回:學(xué)習(xí)方法論

[你必須知道的.NET]第二十一回:認(rèn)識(shí)全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問(wèn)題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問(wèn)題思考


說(shuō)在,開(kāi)篇之前

走鋼絲的人,在刺激中體驗(yàn)快感。帶著問(wèn)題思考,在問(wèn)題上迸發(fā)火花。

或者給問(wèn)題以答案,或者給答案以問(wèn)題,你可能永遠(yuǎn)無(wú)法看清全部,但是總能從一點(diǎn)突破很多。事實(shí)的關(guān)鍵就在于面對(duì)問(wèn)題,我該如何思考?

String Interning(字符串駐留)就是這樣一個(gè)值得思考的話題,帶著問(wèn)題思考,我們至少要理清以下幾個(gè)問(wèn)題:

  • 什么是string?
  • 什么是字符串駐留?
  • 字符串駐留的運(yùn)行機(jī)制及執(zhí)行過(guò)程?
  • 字符串駐留的其他問(wèn)題?

帶著幾個(gè)問(wèn)號(hào),你必須知道的.NET,繼續(xù)更多體驗(yàn)。

系列文章導(dǎo)航:

[你必須知道的.NET] 開(kāi)篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對(duì)抽象編程:接口和抽象類(lèi)

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來(lái)居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關(guān)鍵字---把new說(shuō)透

[你必須知道的.NET] 第六回:深入淺出關(guān)鍵字---base和this

[你必須知道的.NET] 第七回:品味類(lèi)型---從通用類(lèi)型系統(tǒng)開(kāi)始

[你必須知道的.NET] 第八回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(上)-內(nèi)存有理

[你必須知道的.NET] 第九回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(中)-規(guī)則無(wú)邊

[你必須知道的.NET] 第十回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(下)-應(yīng)用征途

[你必須知道的.NET] 第十一回:參數(shù)之惑---傳遞的藝術(shù)(上)

[你必須知道的.NET] 第十二回:參數(shù)之惑---傳遞的藝術(shù)(下)

[你必須知道的.NET] 第十三回:從Hello, world開(kāi)始認(rèn)識(shí)IL

[你必須知道的.NET] 第十四回:認(rèn)識(shí)IL代碼---從開(kāi)始到現(xiàn)在

[你必須知道的.NET] 第十五回:繼承本質(zhì)論

[你必須知道的.NET] 第十六回:深入淺出關(guān)鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫(xiě)和重載

[你必須知道的.NET] 第十八回:對(duì)象創(chuàng)建始末(上)

[你必須知道的.NET] 第十九回:對(duì)象創(chuàng)建始末(下)

[你必須知道的.NET]第二十回:學(xué)習(xí)方法論

[你必須知道的.NET]第二十一回:認(rèn)識(shí)全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問(wèn)題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


 

2 欲求思考

欲求思考,則從基本開(kāi)始,對(duì)于理解整個(gè)string intern機(jī)制是大有裨益的,因此深入的第一步就從基本概念開(kāi)始。隨著我們分析的層層深入,就會(huì)發(fā)現(xiàn)看似曲折的結(jié)果,原來(lái)不過(guò)如此而已,這正是技術(shù)探求的最佳方式。

什么是string

什么是string呢,提起這個(gè)問(wèn)題,我想下面的圖例可以給出一點(diǎn)啟示:

 

string在本質(zhì)上就是一連串的有順序的字符集合。

簡(jiǎn)單的說(shuō),string就是char[],而在.NET中string頭一回具有了類(lèi)的概念,暗合了.NET一切皆為對(duì)象的大一統(tǒng)格局?;貧w本質(zhì),我們重新審視如此另類(lèi)而多彩的string,你會(huì)不禁明白,string本質(zhì)上就是一個(gè)16位Unicode字符數(shù)組。打開(kāi)string的Disassemble代碼,我們可直擊其本質(zhì):

    [Serializable, ComVisible(true)]
    public sealed class String : IComparable, ICloneable, IConvertible, IComparable<string>,
 IEnumerable<char>, IEnumerable, IEquatable<string>
    {
    }

系列文章導(dǎo)航:

[你必須知道的.NET] 開(kāi)篇有益

[你必須知道的.NET] 第一回:恩怨情仇:is和as

[你必須知道的.NET] 第二回:對(duì)抽象編程:接口和抽象類(lèi)

[你必須知道的.NET] 第三回:歷史糾葛:特性和屬性

[你必須知道的.NET] 第四回:后來(lái)居上:class和struct

[你必須知道的.NET] 第五回:深入淺出關(guān)鍵字---把new說(shuō)透

[你必須知道的.NET] 第六回:深入淺出關(guān)鍵字---base和this

[你必須知道的.NET] 第七回:品味類(lèi)型---從通用類(lèi)型系統(tǒng)開(kāi)始

[你必須知道的.NET] 第八回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(上)-內(nèi)存有理

[你必須知道的.NET] 第九回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(中)-規(guī)則無(wú)邊

[你必須知道的.NET] 第十回:品味類(lèi)型---值類(lèi)型與引用類(lèi)型(下)-應(yīng)用征途

[你必須知道的.NET] 第十一回:參數(shù)之惑---傳遞的藝術(shù)(上)

[你必須知道的.NET] 第十二回:參數(shù)之惑---傳遞的藝術(shù)(下)

[你必須知道的.NET] 第十三回:從Hello, world開(kāi)始認(rèn)識(shí)IL

[你必須知道的.NET] 第十四回:認(rèn)識(shí)IL代碼---從開(kāi)始到現(xiàn)在

[你必須知道的.NET] 第十五回:繼承本質(zhì)論

[你必須知道的.NET] 第十六回:深入淺出關(guān)鍵字---using全接觸

[你必須知道的.NET] 第十七回:貌合神離:覆寫(xiě)和重載

[你必須知道的.NET] 第十八回:對(duì)象創(chuàng)建始末(上)

[你必須知道的.NET] 第十九回:對(duì)象創(chuàng)建始末(下)

[你必須知道的.NET]第二十回:學(xué)習(xí)方法論

[你必須知道的.NET]第二十一回:認(rèn)識(shí)全面的null

[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問(wèn)題思考

[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


 

什么是字符串駐留(String Interning)

回歸經(jīng)典,我們首先給出MSDN對(duì)于字符串駐留的一點(diǎn)討論:

公共語(yǔ)言運(yùn)行庫(kù)通過(guò)維護(hù)一個(gè)表來(lái)存放字符串,該表稱(chēng)為拘留池,它包含程序中以編程方式聲明或創(chuàng)建的每個(gè)唯一的字符串的一個(gè)引用。因此,具有特定值的字符串的實(shí)例在系統(tǒng)中只有一個(gè)。

例如,如果將同一字符串分配給幾個(gè)變量,運(yùn)行庫(kù)就會(huì)從拘留池中檢索對(duì)該字符串的相同引用,并將它分配給各個(gè)變量。

之所以,將string這個(gè)熟悉的命題拿出來(lái)造輪子,并不是再造個(gè)輪子自己陶醉。關(guān)于string的輪子,實(shí)在太多了,而且個(gè)個(gè)不順眼,它就像編程的精靈,四處可見(jiàn)隨處都有。string是如此的重要,以至于CLR必須以特殊的方式來(lái)實(shí)現(xiàn)對(duì)string類(lèi)型的管理、存取和布局,在這些復(fù)雜的特殊表象中,字符串駐留機(jī)制是string特殊性的集中體現(xiàn),它的基本原理可以概括為:

  • CLR維護(hù)一個(gè)類(lèi)似于哈希表的內(nèi)部結(jié)構(gòu),用于維護(hù)對(duì)于字符串的統(tǒng)一管理。
  • 但JIT編譯時(shí),CLR首先查找哈希表,如果沒(méi)有找到匹配的字符串記錄,則在托管堆中創(chuàng)建新的string實(shí)例,并為哈希表添加一個(gè)鍵值對(duì)記錄;下一次查找相同string時(shí),則只返回該記錄的值給第二次創(chuàng)建的string對(duì)象。
  • 通過(guò)這種方式,字符串駐留機(jī)制有效實(shí)現(xiàn)了對(duì)string的池管理,節(jié)省了大量的內(nèi)存空間。

詳細(xì)的字符串駐留機(jī)制,敬請(qǐng)參考:

快捷參考

關(guān)于字符串駐留機(jī)制的詳細(xì)過(guò)程,不是本文所要解決的主要問(wèn)題,你可以參考:

NET技術(shù)[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問(wèn)題思考,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 一级做a爱片性色毛片武则天五则 | 不卡一区二区三区四区 | 在线观看色网 | 国产视频一区在线播放 | 国产性色视频在线高清 | 国产成人精品微拍视频 | 你懂得2019在线观看网站 | 国产成人亚洲精品乱码在线观看 | 国产1区在线观看 | 久久一日本道色综合久久m 久久伊人草 | 免费的黄色片视频 | 欧美 亚洲 丝袜 清纯 中文 | 狠狠干2023| 4hu永久影院在线四虎 | 激情免费网站 | 精产国品一区 | 国产zzzwww在线观看 | 悠悠色综合 | 亚洲激情视频 | 色噜噜国产在线91蝌蚪 | 伊人久久综合谁合综合久久 | 四虎成人4hutv影院 | 在线视频黄色 | 四虎8848精品永久在线观看 | 亚洲成a人v天堂网 | 美女视频网 | 夜夜夜夜夜夜夜猛噜噜噜噜噜噜 | 国产精品露脸国语对白手机视频 | 国产最新精品精品视频 | 国产原创精品 | 国产精品98福利小视频 | 一本伊人 | 久久精品二区 | 亚洲精品欧美综合四区 | 一区二区三区 亚洲区 | 久久性妇女精品免费 | 免费国产成人手机在线观看 | 精品久久久久久久久久久久久久久 | 激情五月婷婷久久 | 免费激情小视频 | 亚洲国产婷婷综合在线精品 |