Avoid using destructor in C# because of service performance
penalty due to the Garbage Collector (GC) works. Another reason to avoid
destructor is, we can not predict when destructor will get called to clean up
the resources. C# destructors are not really destructors like in C++, they are
just C# compiler feature to represent CLR Finalizers. Follow the below usage
guidelines if you want to use
destructors in C# definetly.
• If you want use
destructor, call GC.SuppressFinalize() inside destructor so that it removes the
object quickly from memory.
• If your class is using
unmanaged or expensive resources like database connections, Windows handles, or
graphics which needs to be disposed as soon as possible, implements IDisposal
interface which allows us to release resources explicitly. If we implements
IDisposable interface, we need to implements Dispose() method which is member
of IDisposable interface.
• If base class is
implementing IDisposable interface, child class which is implementing base
class shouldn't implement IDisposable interface instead it should implement
Dispose() method of base class.
• Don't access any
reference type members in the destructor because it is very much possible that
all those reference members already garbage collected before destructor called
by GC. In this scenario, if we try to dereferencing those objects may throw
• We can access value
type members in the destructor.
• You should not throw
exceptions inside destructor.