Память используется только для сбора мусора, когда это необходимо, более технически, когда так называемое Поколение 0 заполнено или когда общее давление системной памяти достаточно для принудительного сбора мусора.Память не автоматически восстанавливается, когда выходит из области видимости.Подробнее здесь и здесь .
Только для тестирования, попробуйте вызвать GC.Collect()
после закрытия диалога (после того, как на него больше нет ссылок), чтобы заставить ГХ собирать любую доступную память.
На самом деле вы должны не возиться с сборщиком мусора, он сильно настроен для лучшей производительности.
Если вы подозреваете, что у вас действительно происходит утечка памяти, используйте некоторыесвоего рода профилировщик памяти для анализа вашего приложения.
Попробуйте, например, RedGates Memory Profiler , у них есть пробная версия на основе времени.
Выполните этот обход чтобы набрать скорость и немного узнать, что искать и как.