Чем отличается метод Dispose() от Finalize() ?

Ответ на Ваш вопрос частично (или полностью) может быть в данном посте.

Также рекоммендуем Вам пройти курс C# Professional, где на 9-м уроке подробно рассматривается механизм сборки мусора в языке C#.

Dispose - это механизм освобождения ресурсов, используемый программистом, а Finalize - используемый самой платформой .NET Framework.

Рекоммендуется реализовывать интерфейс IDisposable, вместо того, что б создавать пользовательские финализаторы. Тобишь если нужно освободить ресурсы памяти в определённом месте - вызовите метод Dispose в указанном месте и таким образом дадите компилятору знать, что в данном месте нужно освободить неуправляемые ресурсы памяти.

Что бы не реализовывать интерфейс явно, можно просто использовать конструкцию using (по закрытию блока using автоматически вызовется метод Dispose).