Search code examples
c#finalizer

Finalizer not called


I have a class in C# where I want to close out some communication ports properly when my class is being disposed. However, the finalizer is never being called when I exit the program. Why is that? Am I doing something wrong?

I am calling the dispose manually which goes through and closes all communications. This is not fired either.

Here is the finalizer I am using:

~Power()
{
    Dispose(false);
}

Solution

  • The finalizer (which is what you're using here) is only called during the Finalization phase, which will happen during GC.

    If you implement IDisposable correctly, this should never get called. I cover this in detail on my series on IDisposable.

    That being said, if your "communication ports" are handled via managed classes, you shouldn't use a finalizer at all. This is adding overhead that does not help you whatsoever. Just implement IDisposable (properly), and let the managed wrappers around the port classes handle finalization if required.