If objects are disposable, you should call Dispose(). If you don't call it explicitly, Dispose() will be called by the garbage collector outside of your control. In many cases, the objects are disposable precisely because they are not thread-safe, and could therefore crash or corrupt the process when disposed from the GC thread. As Gaston mentioned, it's generally best to call Dispose() indirectly via the using statement.