Feb 26, 2014

Difference Between Finalize and Dispose Method


 Finalize:

Used to free unmanaged resources like files, database connections, COM etc. held by an object before that object is destroyed.  

Internally, it is called by Garbage Collector and cannot be called by user code.

It belongs to Object class.  

Implement it when you have unmanaged resources in your code, and want to make sure that these resources are freed when the Garbage collection happens. 

There is performance costs associated with Finalize method.  

For Example,
  1. // Implementing Finalize method
  2. public class MyClass
  3. {
  4. //At runtime C# destructor is automatically Converted to Finalize method.
  5. ~MyClass ()
  6. {
  7. //TO DO: clean up unmanaged objects
  8. }
  9. }


Dispose:

It is used to free unmanaged resources like files, database connections, COM etc. at any time.  

Explicitly, it is called by user code and the class implementing dispose method must implement IDisposable interface. 


It belongs to IDisposable interface.  

Implement this when you are writing a custom class that will be used by other users.


There is no performance costs associated with Dispose method.  


Note

  1. You cannot override the Finalize method in the C# or C++ languages. But you can override Finalize method in VB.NET since it does not support destructor.
  2. You should not implement a Finalize method for managed objects, because the garbage collector cleans up managed resources automatically.
  3. A Dispose method should call the GC.SuppressFinalize() method for the object of a class which has destructor because it has already done the work to clean up the object, then it is not necessary for the garbage collector to call the object's Finalize method.


No comments:

Post a Comment