#429 – Use the Dispose Pattern for Deterministic Destruction
October 10, 2011 3 Comments
You can implement a finalizer in a class to explicitly release unmanaged resources before an object’s memory is freed. Drawbacks of this approach include:
- You don’t control when the object’s resources are cleaned up
- A finalizer can’t make use of any other managed objects (they may have already been finalized)
Another pattern for releasing unmanaged resources is for a class to implement the IDisposable interface by providing a Dispose method. Dispose is meant to clean up the object’s resources when it’s called. A client of the class can decide exactly when it wants to release the object’s resources (deterministic destruction). Benefits of this pattern include:
- Can release resources earlier, not waiting for finalization
- Dispose logic can make use of other managed resources
public class Dog : IDisposable { public void Dispose() { // Release unmanaged resources here // Note: need logic to prevent double disposal, etc. }
Pingback: #430 – A Dispose Pattern Example « 2,000 Things You Should Know About C#
Pingback: #646 – Value Types Don’t Have Finalizers « 2,000 Things You Should Know About C#
Pingback: #941 – Checking to See If Objects Are Disposable | 2,000 Things You Should Know About C#