Сборщик мусора запускается всякий раз, когда решает запустить; это не обязательно связано с тем, что делает пользователь, и, конечно, не сворачивает приложение. Как правило, вы можете рассматривать это как функцию от объема используемой памяти по сравнению с общим объемом свободной памяти. Но дело в том, что для программиста это должно быть несколько непрозрачно. Большим преимуществом сборки мусора по сравнению с ручным управлением памятью является то, что вам не нужно беспокоиться об этом.
Из вашего вопроса я подозреваю, что вы используете диспетчер задач Windows, чтобы отслеживать использование памяти вашим приложением и определять, когда происходит сборка мусора. Это огромная ошибка. Если вам действительно нужно выполнить профилирование памяти, вам нужно инвестировать в правильный профилировщик. Диспетчер задач не предназначен для этого, и вы часто будете получать ложные показания.
В частности, причина, по которой вы, по-видимому, видите заметное уменьшение объема памяти, используемой вашим приложением, когда вы минимизируете его, является лишь одной из ложных операций чтения, которые вы получите при попытке выполнить профилирование памяти с помощью диспетчера задач. На самом деле происходит то, что всякий раз, когда вы минимизируете приложение, ядро Windows автоматически выгружает большую часть используемой памяти. Вы увидите это для всех ваших приложений, а не только для тех, которые написаны на .NET. Поскольку диспетчер задач показывает вам подмножество общей памяти, используемой приложением, которое существует в реальной памяти в данный момент (т. Е. Объем, который не был выгружен на диск), он выглядит следующим образом использование памяти уменьшилось, когда это не так. Чтобы получить немного более точное чтение, вы должны посмотреть на значение «Private Bytes» процесса. Эта статья базы знаний предоставляет дополнительную информацию.