Joe*_*Joe 33 .net c# dispose idisposable
我有一个包含大量静态成员的类,其中一些保留对托管和非托管对象的引用.
例如,一旦引用了Type,就会调用静态构造函数,这会导致我的类启动tasks的blockingQueue.例如,当调用其中一个静态方法时会发生这种情况.
我实现了IDisposable,它为我提供了处理我创建的任何实例对象的方法.但是,如果使用者不从我的类创建任何实例对象,则永远不会调用这些方法.
如何以及在何处放置代码来处理由我的类的静态部分维护的引用?我一直认为在释放最后一个实例对象时会发生静态引用资源的处理; 这是我第一次创建一个不会创建任何实例的类.
das*_*ght 51
在卸载托管类的应用程序域之前,不会对类的静态变量进行垃圾回收.该Dispose()方法不会被调用,因为它是一个实例方法,并且您说您不会创建任何类的实例.
如果您想使用该Dispose()方法,请将您的对象设为单个,创建它的一个实例,并在您的应用程序即将退出时显式处理它.
public class MyClass : IDisposable {
public IList List1<int> {get; private set;}
public IDictionary<string,string> 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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)