String.IsInterned(String) Метод

Определение

Извлекает ссылку на указанный объект String.

C#
public static string? IsInterned (string str);
C#
public static string IsInterned (string str);

Параметры

str
String

Строка для поиска в пуле интернирования.

Возвращаемое значение

String

Ссылка на значение str, если оно находится в пуле интернирования среды CLR; в противном случае — значение null.

Исключения

str имеет значение null.

Примеры

В следующем примере показано, что строки литерала автоматически интернированы компилятором.

C#
// 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.

Комментарии

Среда CLR автоматически поддерживает таблицу, называемую пулом интернирования, которая содержит единственный экземпляр каждой уникальной строковой константы литерала, объявленной в программе, а также любой уникальный экземпляр String , добавляемый программным путем вызова Intern метода.

Пул интернирования экономит хранилище строк. Если литеральная строковая константа присваивается нескольким переменным, каждая переменная задается как ссылка на одну и ту же константу в пуле интернирования, а не на несколько разных экземпляров String , имеющих одинаковые значения.

Этот метод выполняет поиск str в пуле интернирования. Если str уже был интернирован, возвращается ссылка на этот экземпляр; в противном случае возвращается значение null .

Сравните этот метод с Intern методом.

Этот метод не возвращает логическое значение. При вызове метода, так как требуется логическое значение, указывающее, является ли конкретная строка интернированной, можно использовать следующий код.

C#
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.

Примечание

Вы можете переопределить использование пула интернирования при использовании Ngen.exe (генератор образов в машинном кодах) для установки сборки в кэш образов в машинном кодах на локальном компьютере. Дополнительные сведения см. в разделе "рекомендации по производительности" раздела "Примечания" для Intern Свойства.

Применяется к

Продукт Версии
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 2.0, 2.1

См. также раздел