
Мне не удалось воспроизвести проблему с указанным исходным кодом. Этот скриншот от около 20 секунд. Но я оставил его включенным во время приготовления кофе, и все было в порядке Это было зацикливание шаблона памяти, как показано выше.
Одна вещь, которую я заметил, состоит в том, что требуется некоторое время, прежде чем GC освобождает память. GC запускается только тогда, когда вы начинаете испытывать недостаток памяти или когда вызываете его вручную с помощью GC.Collect();
. В этот момент запускается фоновый процесс, который выполняет фактическую очистку. Этот поток сборки мусора не полностью прерывает основной поток ваших программ (согласно документации Microsoft > фоновая сборка мусора рабочей станции). Таким образом, это означает, что можно продолжать выделять память даже во время работы GC. На этом этапе это гонка, которая является первой. Вы выделяете достаточно памяти, чтобы выйти за пределы. или ваш GC с его очисткой.
Должен ли каждый объект быть утилизирован вручную для закрытой / утилизированной формы?
Нет, обычно глобальные ресурсы не должны выбрасываться. GC очистит их, если ничто не ссылается на них. Однако, если глобальные ресурсы - это неуправляемые ресурсы (например, stream
или bitmap
), вам необходимо утилизировать их, прежде чем их можно будет очистить, то же самое относится и к локальным неуправляемым ресурсам.
из комментариев:
Это происходит, даже если каждая форма создается пользователем, нажимающим кнопку ... с минутами между создаваемыми формами.
Я собираюсь предположить, что это в вашем реальном приложении, а не в форме, предоставленной в качестве тестового образца. Скорее всего, вы оставляете ссылку на эту форму (например, через результат диалога или открываете неповрежденный ресурс). Если это с данной формой, я не могу объяснить это, и вам, возможно, придется проверить, не перезаписали ли вы настройки GC чем-то очень экзотическим или все вместе отключили.