I have a class with extensive static members, some of which keep references to managed and unmanaged objects.
For instance, the static constructor is called as soon as the Type is referenced, which causes my class to spin up a blockingQueue of Tasks. This happens when one of the static methods is called, for example.
I implemented IDisposable, which gives me methods to handle disposal on any instance objects I created. However, these methods are never called if the consumer doesn't create any instance objects from my class.
How and where do I put code to dispose of references maintained by the static portion of my class? I always thought that disposal of static-referenced resources happened when the last instance object was released; this is the first time I've ever created a class where no instances may ever be created.
The static variable of your class are not garbage collected until the app domain hosting your class is unloaded. The
Dispose()
method will not be called, because it is an instance method, and you said that you wouldn't create any instances of your class.If you would like to make use of the
Dispose()
method, make your object a singleton, create one instance of it, and dispose of it explicitly when your application is about to exit.You should dispose this objects manually, there is no way to create a "finalizer" for static resources.