String.Intern 方法 (String)

public static string Intern(string str)

參數

str

要在暫存池中搜索的字符串。編程

返回值

Type:  System.String

若是暫存了 str,則返回系統對其的引用;不然返回對值爲 str 的字符串的新引用。性能

 

1、字符串拘留池的引入ui

     在一個程序中,若是將同一個字符串賦值給不一樣的字符串引用,那麼系統會爲屢次分配內存空間,然而這些內存中存儲的是同一個字符串(見下圖)。這不只浪費了寶貴的內存,還極大程度的下降了系統的性能。爲了改善程序的性能,.net提出了字符串拘留池機制來解決這一問題。即公共語言運行時維護名爲暫存池,其中包含對每一個聲明或在程序中以編程方式建立的惟一字符串的單個引用的表,從而節約的字符串存儲空間。所以,存在一個實例並用特定值的文字字符串的僅一次在系統中。spa

  例如,若是將相同的文字字符串分配給幾個變量,則運行時將檢索從暫存池中對文字字符串的相同引用,並將其分配給每一個變量。.net

    string a="abcde";  string b="abcde";3d

2、字符串拘留池的原理對象

     一旦使用了字符串拘留池,當CLR啓動的時候,會在內部建立一個容器,容器的鍵是字符串內容,值時字符串在託管堆上的引用。當一個新的字符串對象須要分配時,CLR首先檢測容器中是否包含了該字符串對象,若是已經包含,就直接返回已經存在的字符串對象的引用;若是不存在,則新分配一個字符串對象,並把它添加到內部容器中同時返回該字符串對象的引用。可是當用new關鍵字顯示的申明分配一個字符串對象時,字符串拘留池機制不會再起做用。內存

  Intern 方法使用暫存池來搜索字符串的值等於 str若是存在這樣的字符串,則返回它在暫存池中的引用。若是該字符串不存在,對引用 str 添加到暫存池中,則返回該引用。字符串

  另:get

  public  static  String  IsInterned (String s);

               功能與上個方法類似。只是當字符串s不在字符串拘留池中時,不會分配新的對象,並返回null。

相關文章
相關標籤/搜索