String.IsInterned(String) 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
检索对指定 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
要在暂存池中搜索的字符串。
返回
如果 str
在公共语言运行时的暂存池中,则返回对它的引用;否则返回 null
。
例外
str
上声明的默认值为 null
。
示例
下面的示例演示了编译器自动暂存文本字符串。
// 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 。
拘留池节省了字符串存储。 如果将文本字符串常量分配给几个变量,则每个变量将设置为引用拘留池中的相同常量,而不是引用具有相同值的多个不同实例 String 。
此方法查找 str
暂存池中的。 如果已 str
暂存,则返回对该实例的引用; 否则 null
返回。
将此方法与方法进行比较 Intern 。
此方法不返回布尔值。 如果调用方法,因为您需要一个指示是否暂存特定字符串的布尔值,则可以使用如下所示的代码。
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 (本机映像生成器) 将程序集安装到本地计算机上的本机映像缓存中时,可以重写拘留池的使用。 有关详细信息,请参阅 "备注" 部分中属性的性能注意事项 Intern 。