Реализация таблицы Char.Latin1CharInfo в .NET

Я читал исходный код структуры System.Char и заметил, что таблица была определена довольно нелогичным образом:

      private static ReadOnlySpan<byte> Latin1CharInfo => new byte[]
{
    // Table entries are here.
};

РЕДАКТИРОВАТЬ: Обратите внимание на =>между и new byte[], указывая, что это свойство доступно только для чтения. Итак, похоже, что каждый раз при доступе выделяется новый. Я не могу себе представить, что это так, так как это произвело бы много мусора при запуске кода обработки текста, который должен вызывать char.IsUpperили же char.IsLowerв тугой петле.

Так что мой вопрос в том, делает ли новый byte[]выделяться каждый раз Latin1CharInfoосуществляется доступ, а если нет, то как это предотвращается компилятором C# или средой выполнения .NET?

Я предполагаю, что разработчики не хотели статически размещать этот объект, поскольку это потребовало бы накладных расходов памяти для каждой программы dotnet, независимо от того, вызывает ли она код в Char. Но я ожидал, что они будут использовать WeakReferenceчтобы гарантировать, что таблица может быть повторно использована, если не будет собран мусор.

0 ответов

Другие вопросы по тегам