Good point, Michael. I didn't consider the implications of messing with other objects in the finalizer. :)
On Tue, Jun 15, 2010 at 4:28 PM, Michael Minutillo < [email protected]> wrote: > The "Disposable Pattern" gets discussed a lot but I'm pretty sure you only > need it when you are holding onto unmanaged resources. From a Finalizer you > aren't supposed to mess with other objects, I presume this includes objects > that the framework uses to wrap unmanaged resources for you. > > i.e. If you keep a FileStream object then you should dispose of it in your > Dispose method. If you get to your own finalizer you should not touch the > FileStream, it has its own finalizer to ensure it gets closed properly. That > means you don't even need a finalizer. You almost never need a finalizer. > You pretty much never need to implement the full disposable pattern. > > At least, that's how I understand it. If you are holding onto com objects > directly then it might be a different story but for Files and SqlConnections > and so on it shouldn't be required. > > > On Tue, Jun 15, 2010 at 2:02 PM, Joseph Clark <[email protected]>wrote: > >> I'm no expert, but I understand there is a "proper" way to implement >> IDisposable to ensure that things always get cleaned up properly. >> >> Implementing IDisposable allows you to cleanly release your resources as >> soon as practical, but relies on the consumer to call the Dispose method >> properly. So, to get around this, you can also define a Finalizer for your >> class that performs your cleanup, in the event that IDisposable is not >> called. >> >> The problem is that Finalizers have a bunch of caveats attached to them >> (related to performance and memory consumption) and thus shouldn't be >> defined unless you really, really need them. >> >> So, the trick is to call GC.SuppressFinalize in your Dispose method, which >> stops the Finalizer from running needlessly (I don't know about C#, but if >> you implement IDisposable in VB.NET, the IDE automatically injects a >> correct implementation of this pattern for you). >> >> I did a quick Google search and found a codeproject article which looks >> accurate enough and covers it in more detail: >> http://www.codeproject.com/KB/cs/idisposable.aspx >> >> Hope this helps. My knowledge of finalizers is only theory-based. >> >> Joe. >> >> >> >> >> On Tue, Jun 15, 2010 at 3:34 PM, Bec Carter <[email protected]>wrote: >> >>> Hi! >>> >>> I have a class which uses temporary files to do its stuff. What do you >>> recommend for ensuring things get cleaned up when things go bad? >>> IDisposable? Or perhaps a big try/finally inside the class functions? >>> >>> Cheers --Bec-- >>> >> >> > > > -- > Michael M. Minutillo > Indiscriminate Information Sponge > Blog: http://wolfbyte-net.blogspot.com >
