GC. GetGeneration может возвращать Int32.MaxValue

Начиная с .NET 8, может вернуться Int32.MaxValue для объектов, GC.GetGeneration выделенных на кучи, отличные от GC (также называемые замороженными кучами), где ранее он вернул 2. Когда и как среда выполнения выделяет объекты в кучах, отличных от GC, является внутренней информацией о реализации. Строковые литералы, например, выделяются в куче, отличной от GC, и следующий вызов метода может возвращать Int32.MaxValue.

int gen = GC.GetGeneration("string");

Прежнее поведение

GC.GetGeneration Ранее возвращаемые целые значения в диапазоне от 0 до 2.

Новое поведение

Начиная с .NET 8, GC.GetGeneration может возвращать значение 0, 1, 2 или Int32.MaxValue.

Представленные версии

.NET 8( предварительная версия 4)

Тип критического изменения

Это изменение поведения.

Причина изменения

.NET представила новую, не GC-кучу, которая немного отличается от существующих куч, которые являются большими кучами объектов (LOH), небольшой кучей объектов (SOH) и закрепленной кучей объектов (POH).

Убедитесь, что вы не используете возвращаемое значение из GC.GetGeneration() индексатора массива или что-либо другое, где Int32.MaxValue непредвиденное.

Затронутые API