Это зависит от того, какие ресурсы вы имеете в виду.
Если вы просто говорите о памяти, то GC действительно справится с этим, когда у вас больше не будет ссылок на объект. Вызов GC.Collect побудит GC работать, но нет никакой гарантии того, что GC будет работать, даже если вы вызываете GC.Collect, поскольку он работает в отдельном потоке.
Если вы говорите о неуправляемых ресурсах, таких как файловые дескрипторы, соединения с БД и т. П., То лучший способ управлять ими - реализовать интерфейс IDispsable, и эти ресурсы будут освобождены вызывающими вашего кода, вызывающими Dispose метод (или, действительно, путем утилизации ГХ вашего объекта).