Почти ресурс, который вы выделяете в Win32, должен быть освобожден с помощью правильного вызова API, который задокументирован на странице MSDN для API выделения.
Это полностью ручной процесс; Сборка мусора не помогает в этом, хотя вы можете использовать SafeHandle или (в крайнем случае) финализаторы.
Как минимум, используйте IDisposable
классы-оболочки для любых ресурсов, которые вы выделяете. В некоторых случаях они уже существуют в Windows Forms.
Вы можете использовать Perfmon или диспетчер задач, чтобы отслеживать количество ручек, открытых в вашем процессе.