String.IsInterned(String) メソッド


指定した String への参照を取得します。Retrieves a reference to a specified String.

 static System::String ^ IsInterned(System::String ^ str);
public static string IsInterned (string str);
static member IsInterned : string -> string
Public Shared Function IsInterned (str As String) As String



インターン プールから検索する文字列。The string to search for in the intern pool.



str が共通言語ランタイムのインターン プール内にある場合は、それへの参照。それ以外の場合は nullA reference to str if it is in the common language runtime intern pool; otherwise, null.


strnullです。str is null.

次の例は、リテラル文字列がコンパイラによって自動的にインターンされることを示しています。The following example demonstrates that literal strings are interned automatically by the compiler.

' Sample for String.IsInterned(String)
Imports System.Text
Imports System.Runtime.CompilerServices

' In the .NET Framework 2.0 the following attribute declaration allows you to 
' avoid the use of the interning when you use NGEN.exe to compile an assembly 
' to the native image cache.
<Assembly: CompilationRelaxations(CompilationRelaxations.NoStringInterning)> 
Class Sample
    Public Shared Sub Main()
        ' String str1 is known at compile time, and is automatically interned.
        Dim str1 As [String] = "abcd"

        ' Constructed string, str2, is not explicitly or automatically interned.
        Dim str2 As [String] = New StringBuilder().Append("wx").Append("yz").ToString()
        Test(1, str1)
        Test(2, str2)
    End Sub

    Public Shared Sub Test(ByVal sequence As Integer, ByVal str As [String])
        Console.Write("{0}) The string, '", sequence)
        Dim strInterned As [String] = [String].IsInterned(str)
        If strInterned Is Nothing Then
            Console.WriteLine("{0}', is not interned.", str)
            Console.WriteLine("{0}', is interned.", strInterned)
        End If
    End Sub
End Class

'This example produces the following results:

'1) The string, 'abcd', is interned.
'2) The string, 'wxyz', is not interned.

'If you use NGEN.exe to compile the assembly to the native image cache, this
'example produces the following results:

'1) The string, 'abcd', is not interned.
'2) The string, 'wxyz', is not interned.


共通言語ランタイムは、インターンプールと呼ばれるテーブルを自動的に保持します。このテーブルには、プログラムで宣言された一意のリテラル文字列定数の1つのインスタンスと、Intern メソッドを呼び出すことによってプログラムによって追加する String の一意のインスタンスが含まれます。The common language runtime automatically maintains a table, called the intern pool, which contains a single instance of each unique literal string constant declared in a program, as well as any unique instance of String you add programmatically by calling the Intern method.

インターンプールは、文字列ストレージを節約します。The intern pool conserves string storage. リテラル文字列定数を複数の変数に割り当てた場合、同じ値を持つ String の複数のインスタンスを参照するのではなく、各変数がインターンプールで同じ定数を参照するように設定されます。If you assign a literal string constant to several variables, each variable is set to reference the same constant in the intern pool instead of referencing several different instances of String that have identical values.

このメソッドは、インターンプール内の str を検索します。This method looks up str in the intern pool. str が既にインターンされている場合は、そのインスタンスへの参照が返されます。それ以外の場合は null が返されます。If str has already been interned, a reference to that instance is returned; otherwise, null is returned.

このメソッドと Intern メソッドを比較します。Compare this method to the Intern method.

このメソッドは、ブール値を返しません。This method does not return a Boolean value. 特定の文字列がインターンされているかどうかを示すブール値が必要なためにメソッドを呼び出す場合は、次のようなコードを使用できます。If you call the method because you want a Boolean value that indicates whether a particular string is interned, you can use code such as the following.

Module Example
   Public Sub Main()
      Dim str1 As String = "a"
      Dim str2 As String = str1 + "b"
      Dim str3 As String = str2 + "c"
      Dim strings() As String = { "value", "part1" + "_" + "part2", str3, 
                                  String.Empty, Nothing }
      For Each value In strings
         If value Is Nothing Then Continue For
         Dim interned As Boolean = (String.IsInterned(value) IsNot Nothing)
         If interned Then
            Console.WriteLine("'{0}' is in the string intern pool.", 
            Console.WriteLine("'{0}' is not in the string intern pool.",
         End If
   End Sub
End Module
' The example displays the following output:
'       'value' is in the string intern pool.
'       'part1_part2' is in the string intern pool.
'       'abc' is not in the string intern pool.
'       '' is in the string intern pool.


.NET Framework バージョン2.0 以降では、 ngen.exe (ネイティブイメージジェネレーター)を使用してローカルコンピューターのネイティブイメージキャッシュにアセンブリをインストールするときに、インターンプールの使用を無効にすることができます。Starting with the .NET Framework version 2.0, you can override the use of the intern pool when you use the Ngen.exe (Native Image Generator) to install an assembly to the native image cache on a local computer. 詳細については、「Intern プロパティ」の「解説」の「パフォーマンスに関する考慮事項」を参照してください。For more information, see Performance Considerations in the Remarks section for the Intern property.