Dispose and the Garbage collector
I was assigned to a .Net web project some years ago to see why the application continued to allocate more and more memory untill IIS thought it was to time to restart the application. I solved a lot of the problems in that project simply by calling the Dispose method on any object that implemented one, once I didn't need that object anymore. Since then, I've tried to make it a rule to call the dispose method for all objects that expose that method.
But I still see projects where this doesn't happen. When I discus this with the developers on that project, they are under the impression that it is not necessary to do this. People think that the Garbage collector will clean up resources. Well, it might but you never know when! I believe it is good practice to call the Dispose method on any object that exposes it once you no longer need that object. The Dispose method will clean up any resources that need to be cleaned up. For example, the SqlConnection object will clean up anything related to the connection, especially the unmanaged resources that the GC will never touch!
I found some interesting reading on the subject of Dispose, Finalize and the garbage collector!