Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Should I bother calling dispose on objects which share lifetime of process?

I am aware that all objects which implement IDisposable should be disposed of as soon as they are no longer needed in order to free the memory used by their unmanaged resources.

My question relates to objects which I know for a fact will live until the host process itself is terminated. Would it make any difference if I dispose of them or not? Is there any chance of memory not being freed when the process dies? What about GDI objects? Would the GDI handles be freed when the process dies even if they were not disposed?

I fully understand that it is good practice to dispose of all objects anyways. I ask purely out of curiosity.

like image 542
Rotem Avatar asked Mar 12 '12 22:03

Rotem


1 Answers

It depends on the object (resource) in question.

When a process terminates all unmanaged memory, filehandles and other OS resources will be released, even if the associated finalizers failed to run.

But I'm not so sure about db handles, named-mutexes etc.

So before you could consider it safe to not call Dispose, you would have to know about the resource type and how it relates to the process. Much easier to just call Dispose() out of general principle.

But it is a theoretical argument, most classes will use SafeHandle : CriticalFinalizerObject . So I don't think it ever is a real practical problem.

like image 66
Henk Holterman Avatar answered Sep 27 '22 17:09

Henk Holterman