一区二区久久-一区二区三区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)系我們修改或刪除,多謝。

主站蜘蛛池模板: 免费精品美女久久久久久久久 | 四川农村女人一级毛片 | 亚洲福利视频网站 | 精品一区二区三区四区五区 | 色老板亚洲 | 99精品视频在线观看re | 怡红院美国 | 毛片99| 成人在线视频网址 | 亚洲综合天堂 | 一级做性色a爰片久久毛片免费 | 岛国免费| 亚洲精品手机在线观看 | 99精品视频在线观看免费 | 高清一区二区三区视频 | 国产区视频在线观看 | 在线看一区二区 | 日本久久精品免视看国产成人 | 亚洲一区二区免费视频 | 日本一二三高清 | 久在线观看 | 精品四虎免费观看国产高清 | 国产伦精品一区二区三区 | 69国产| 碰碰碰人人澡人人爱摸 | 国内久久久 | 无遮挡一级毛片呦女视频 | 黄色在线免费观看 | 国产乱码一区二区三区四川人 | 欧美综合影院 | 国产精品福利午夜在线观看 | 视频一区二区三区在线观看 | 91在线免费观看网站 | 精品精品国产自在久久高清 | 91亚洲欧美 | 欧美成人性色区 | 色多多污在线观看 | 国产精品美女久久久久 | 国产色手机在线观看播放 | 久久国产成人 | 精品国产污网站在线观看15 |