Сборка больших объектов в .NET сборщиком мусора

113
08 февраля 2022, 02:10

В .NET есть такое понятие, как большой объект - это объект весящий более 85,000 байт.

С такими объектами несколько иначе работает сборщик мусора и всё такое.

Так вот, вопрос в том:

Что входит в эти 85,000? Сумма всех маленьких объектов внутри объекта (агрегация) или только сам объект (скажем, здоровенный массив INT'ов)? Мне кажется, что второй вариант. Однако, в MSDN что-то подтверждения не нашёл.

Answer 1
  • Если это массив примитивов, то нужно считать примитивы.
  • Если это массив объектов, то не нужно считать все внутренности объекта, учитываются лишь сами ссылки (4 или 8 в зависимости от архитектуры). Так что, если это массив объектов, то на x64 туда можно запихать 85000/8.

Со списками, к слову, всё сложнее из-за capacity. Размер внутреннего массива куда больше, чем на данный момент фактических элементов в нём.

Ссылки по теме:

  • CLR Inside Out: Large Object Heap Uncovered.
  • The large object heap on Windows systems.
  • Large Object Heap Improvements in .NET 4.5.
  • Programming C# 8.0: Build Cloud, Web, and Desktop Applications.
READ ALSO
Как получить дочерние элементы в Tabcontrol?

Как получить дочерние элементы в Tabcontrol?

Есть несколько вкладок в TabcontrolХочу получить список чекбоксов, которые прокликаны

75
SharpGL. Отрисовать текстуру в квадрат

SharpGL. Отрисовать текстуру в квадрат

Возникла проблема с отрисовкой PNG/JPG изображения с применением библиотеки SharpGLКаким образом это можно устроить?

99
Не обновляются размеры у Renderer

Не обновляются размеры у Renderer

Я написал скрипт в котором после изменения localScale у объекта хочу получить значения bounds, но renderer не меняет значения bounds, как решить эту проблему?

73
Обновить информацию в базе данных c#

Обновить информацию в базе данных c#

Есть база данных gallery, в которой 7 связанных таблицНеобходимо после изменения данных в dataGrivView1 после нажатия на кнопку значения менялись в базе...

105