Деструкторы (или, вернее, финализаторы - в .NET нет деструкторов) не гарантированно будут выполняться в .NET - объекты могут быть очищены по желанию времени выполнения или даже никогда . Вы не можете полагаться на то, что ваш метод финализатора когда-либо вызывается.
Если вам нужно что-то сделать, когда ваша форма закрыта, обработайте событие Closed.
Если вам необходимо освободить неуправляемый ресурс (например, закрыть открытый файл), добавьте эту логику в метод Dispose ().
Если вы беспокоитесь об использовании памяти, не беспокойтесь об использовании памяти. Среда выполнения управляет памятью автоматически на основе собственной логики.
Ссылка: Сборка мусора (MSDN)