c#静态成员是如何以及何时处置的?

我有一个包含大量静态成员的类,其中一些保留对托管和非托管对象的引用。

例如,一旦引用了Type,就会调用静态构造函数,这会导致我的类启动tasks的blockingQueue。 例如,当调用其中一个静态方法时会发生这种情况。

我实现了IDisposable,它为我提供了处理我创建的任何实例对象的方法。 但是,如果使用者不从我的类创建任何实例对象,则永远不会调用这些方法。

如何以及在何处放置代码来处理由我的类的静态部分维护的引用? 我一直认为在发布最后一个实例对象时会发生静态引用资源的处理; 这是我第一次创建一个不会创建任何实例的类。

在卸载托管类的应用程序域之前,不会对类的静态变量进行垃圾回收。 不会调用Dispose()方法,因为它是一个实例方法,并且您说您不会创建类的任何实例。

如果您想使用Dispose()方法,请将对象设置为单例,创建它的一个实例,并在应用程序即将退出时显式处理它。

 public class MyClass : IDisposable { public IList List1 {get; private set;} public IDictionary Dict1 {get; private set;} public void Dispose() { // Do something here } public static MyClass Instance {get; private set;} static MyClass() { Instance = new MyClass(); } public static void DisposeInstance() { if (instance != null) { Instance.Dispose(); Instance = null; } } } 

您应该手动处理此对象,无法为静态资源创建“终结器”。

 public class Logger : IDisposable { private string _logDirectory = null; private static Logger _instance = null; private Logger() : this(ConfigurationManager.AppSettings["LogDirectory"]) { AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit; } private Logger(string logDirectory) { } public static Logger Instance { get { if (_instance == null) _instance = new Logger(); return _instance; } } private void CurrentDomain_ProcessExit(object sender, EventArgs e) { Dispose(); } public void Dispose() { // Dispose unmanaged resources } }