Possible Duplicate:
Finalize vs Dispose
Hi,
Recently I was quizzed in an interview about finalize and dispose. When is each one of them used and how is Garbage Collector related to them. Kindly share links to enlighten more on the topic.
Kindly share ...
Thanks in advance.
Finalizers are run by the Garbage Collection before an object that is eligible for collection is reclaimed. Dispose()
is meant for cleaning up unmanaged resources, like network connections, files, handles to OS stuff, &c. It works best in conjunction with the using
block where the compiler makes sure that Dispose()
will be called immediately once you are done with an object – and also ensures that you cannot work with the object anymore once it's disposed.
Note that finalizers don't have to run, so relying on that can be dangerous:
What this means for you: Your programs cannot rely on finalizers keeping things tidy. Finalizers are a safety net, not a primary means for resource reclamation. When you are finished with a resource, you need to release it by calling
Close
orDisconnect
or whatever cleanup method is available on the object. (TheIDisposable
interface codifies this convention.)
Careful also with the precise time when an object becomes eligible for collection. Read the article linked above – it's neither scope (a weird word which has noting to do with the lifetime of an object – it's “the region of program text in which it is legal to refer to [a named entity] by its unqualified name.”) nor is it strictly reference counting as an object can become eligible for collection even before the last reference to it goes away.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With