Large Object Heap (LOH) в C# .NET

Куча больших объектов (LOH) – это часть управляемой кучи в .NET, предназначенная для хранения объектов размером более 85 000 байт. LOH используется для оптимизации работы с крупными объектами, такими как массивы и структуры данных, требующие значительного объема памяти.

Особенностью LOH является то, что объекты в ней не перемещаются во время работы сборщика мусора (GC), в отличие от объектов в стандартной управляемой куче. Это предотвращает накладные расходы на копирование больших блоков данных, но приводит к фрагментации памяти, так как освобожденные области могут оставаться неиспользуемыми.

Для управления памятью в LOH .NET предлагает механизм компактизации, начиная с .NET Core 5, который позволяет дефрагментировать память и снижать её фрагментацию. Компактная работа LOH снижает вероятность появления нехватки непрерывной памяти для больших объектов.

Объекты в LOH управляются сборщиком мусора поколения 2, что означает, что они проверяются и освобождаются реже, чем объекты в младших поколениях. Это делает LOH подходящей для долгоживущих данных, но требует осторожности при частом создании и удалении крупных объектов, так как это может приводить к росту потребления памяти и необходимости частого запуска GC.