如何以及何时处置/垃圾收集单例实例

我正在使用从嵌套类创建的Singleton实例。 这个实例保存了一些静态集合,这些集合在处理Singleton时被清除,但问题是我得到了对非null处理的Singleton的引用,它没有正确地进行垃圾回收。

我想知道WHEN以及如何完全处理和垃圾收集我的Singleton实例,以便在dispose(并设置为null)后再次查询实例时,会创建一个新实例。

我对Singleton实例使用以下嵌套模式:

public class SingletonClass : IDisposable { private List _collection; private SingletonClass() { } public static SingletonClass Instance { get { return Nested.Instance; //line 1 - this line returns the non-null instance after dispose and setting the Singleton instance to null which is causing problems } } private void Init() { _collection = new List(); //Add data to above collection } public void Dispose() { //Release collection _collection.Clear(); _collection = null; } class Nested { static Nested() { Instance = new SingletonClass(); Instance.Init(); } internal static readonly SingletonClass Instance; } } 

第1行的问题是,在从客户端类处理SingletonClass之后,_collection对象变为null,而SingletonClass实例即使在设置= null之后仍保持非null。

如果您满足以下基本要求,则只需要实现System.IDisposable

此接口的主要用途是释放非托管资源。

然后我会选择类的析构函数并在示例中调用Dispose()

除此以外

当不再使用该对象时,垃圾收集器会自动释放分配给托管对象的内存。

(除非过程结束,否则不会出现真正的单例)

如果你正在使用这样的话,你可能会更好

 class PseudoSingleton where T : new() { private readonly object _lock = new object(); private T _instance; public T Instance { get { lock (this._lock) { if (this._instance != null) { this._instance = new T(); } return this._instance; } } } public void Reset() { lock (this._lock) { this._instance = null; } } }