String.IsInterned(String) 메서드
정의
public:
static System::String ^ IsInterned(System::String ^ str);
public static string? IsInterned (string str);
public static string IsInterned (string str);
static member IsInterned : string -> string
Public Shared Function IsInterned (str As String) As String
매개 변수
- str
- String
내부 풀에서 검색할 문자열입니다.The string to search for in the intern pool.
반환
str
이 공용 언어 런타임 내부 풀에 있으면 해당 참조이고, 그렇지 않으면 null
입니다.A reference to str
if it is in the common language runtime intern pool; otherwise, null
.
예외
str
이(가) null
인 경우str
is null
.
예제
다음 예제에서는 컴파일러에서 리터럴 문자열을 자동으로 풀 하는 방법을 보여 줍니다.The following example demonstrates that literal strings are interned automatically by the compiler.
// Sample for String::IsInterned(String)
using namespace System;
using namespace System::Text;
using namespace 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)];
void Test( int sequence, String^ str )
{
Console::Write( "{0} The string '", sequence );
String^ strInterned = String::IsInterned( str );
if ( strInterned == nullptr )
Console::WriteLine( "{0}' is not interned.", str );
else
Console::WriteLine( "{0}' is interned.", strInterned );
}
int main()
{
// String str1 is known at compile time, and is automatically interned.
String^ str1 = "abcd";
// Constructed string, str2, is not explicitly or automatically interned.
String^ str2 = (gcnew StringBuilder)->Append( "wx" )->Append( "yz" )->ToString();
Console::WriteLine();
Test( 1, str1 );
Test( 2, str2 );
}
//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.
// Sample for String.IsInterned(String)
using System;
using System.Text;
using 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 static void Main()
{
// String str1 is known at compile time, and is automatically interned.
String str1 = "abcd";
// Constructed string, str2, is not explicitly or automatically interned.
String str2 = new StringBuilder().Append("wx").Append("yz").ToString();
Console.WriteLine();
Test(1, str1);
Test(2, str2);
}
public static void Test(int sequence, String str)
{
Console.Write("{0}) The string, '", sequence);
String strInterned = String.IsInterned(str);
if (strInterned == null)
Console.WriteLine("{0}', is not interned.", str);
else
Console.WriteLine("{0}', is interned.", strInterned);
}
}
//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.
' 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()
Console.WriteLine()
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)
Else
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.
설명
공용 언어 런타임에서는 프로그램에 선언 된 고유한 각 리터럴 문자열 상수의 단일 인스턴스 뿐만 아니라 String 메서드를 호출 하 여 프로그래밍 방식으로 추가 하는 고유한 인스턴스를 포함 하는 인턴 풀 이라는 테이블을 자동으로 유지 관리 합니다 Intern .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.
using System;
public class Example
{
public static void Main()
{
string str1 = "a";
string str2 = str1 + "b";
string str3 = str2 + "c";
string[] strings = { "value", "part1" + "_" + "part2", str3,
String.Empty, null };
foreach (var value in strings) {
if (value == null) continue;
bool interned = String.IsInterned(value) != null;
if (interned)
Console.WriteLine("'{0}' is in the string intern pool.",
value);
else
Console.WriteLine("'{0}' is not in the string intern pool.",
value);
}
}
}
// 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.
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.",
value)
Else
Console.WriteLine("'{0}' is not in the string intern pool.",
value)
End If
Next
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.
참고
Ngen.exe (네이티브 이미지 생성기) 를 사용 하 여 로컬 컴퓨터의 네이티브 이미지 캐시에 어셈블리를 설치할 때 인턴 풀 사용을 재정의할 수 있습니다.You can override the use of the intern pool when you use 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.