.NET Tutorials, Forums, Interview Questions And Answers
Welcome :Guest
Sign In
Win Surprise Gifts!!!

Top 5 Contributors of the Month
Gaurav Pal

Home >> Articles >> C# >> Post New Resource Bookmark and Share   

 Subscribe to Articles

Why is it preferred to not use finalize for clean up?

Posted By:Shashi Ray       Posted Date: March 17, 2009    Points: 25    Category: C#    URL: http://www.dotnetspark.com  

Problem with finalize is that garbage collection has to make two rounds in order to remove objects which have finalize methods.


Below figure will make things clear regarding the two rounds of garbage collection rounds performed for the objects having finalized methods.


In this scenario there are three objects Object1, Object2 and Object3. Object2 has the finalize method overridden and remaining objects do not have the finalize method overridden.


Now when garbage collector runs for the first time it searches for objects whose memory has to free. He can see three objects but only cleans the memory for Object1 and Object3. Object2 it pushes to the finalization queue.


Now garbage collector runs for the second time. He see's there are no objects to be released and then checks for the finalization queue and at this moment it clears object2 from the memory.


So if you notice that object2 was released from memory in the second round and not first. That's why the best practice is not to write clean up Non.NET resources in Finalize method rather use the DISPOSE.




Shashi Ray

 Subscribe to Articles


Further Readings:


No response found. Be the first to respond this post

Post Comment

You must Sign In To post reply
Find More Articles on C#, ASP.Net, Vb.Net, SQL Server and more Here

Hall of Fame    Twitter   Terms of Service    Privacy Policy    Contact Us    Archives   Tell A Friend