Как укротить GC, резервирующего память «про запас»?

Проект на виндовс формах. После вызова метода Invalidate() память приложения растет, GC резервирует ее под возможные нужды. На самом же деле память, реально используемая приложением остается без изменений. Но я то знаю, что в программе не будет создаваться больше ни одного объекта они будут только перерисовываться, как можно избавиться от резервируемой памяти "про запас"? Понимаю, что это на самом деле не важно, т.к. если в системе кончается память то GC освобождает лишнюю, но тем не менее, мне надо чтобы приложение не ело лишней памяти ну или ело, но эта память со временем не увеличивалась (при каждом вызове Invalidate).
  • Вопрос задан
  • 210 просмотров
Пригласить эксперта
Ответы на вопрос 1
Nipheris
@Nipheris Куратор тега C#
На самом же деле память, реально используемая приложением остается без изменений.

Откуда такой вывод?
Но я то знаю, что в программе не будет создаваться больше ни одного объекта они будут только перерисовываться.

Еще более абсурдное суждение. Кто говорит, что перерисовка не приводит к созданию объектов? Как насчёт объектов Graphics?
как можно избавиться от резервируемой памяти "про запас"

Могу ошибаться, но я никогда не слышал о резервировании памяти "про запас". Видимо, объекты все-таки создаются.
мне надо чтобы приложение не ело лишней памяти ну или ело, но эта память со временем не увеличивалась (при каждом вызове Invalidate).

Она будет время от времени собираться, как вы и сказали. Чем меньше свободной памяти в системе, чем чаще будет сборка мусора. Если для вас эти условия недостаточно строгие, используйте языки с ручным управлением памятью.

Еще проверьте, что у вас не утекают IDisposable объекты. Можете повызывать GC.Collect, но это само по себе временное решение.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы