我正在使用从嵌套类创建的 Singleton 实例。此实例包含一些静态集合,这些集合在处理 Singleton 时会被清除,但问题是我得到了对非空处理 Singleton 的引用,它没有被正确地垃圾收集。
我想知道何时以及如何完全处置和垃圾收集我的 Singleton 实例,以便在处置(并设置为 null)之后再次查询该实例时创建一个新实例。
我对 Singleton 实例使用以下嵌套模式:
public class SingletonClass : IDisposable
{
private List<string> _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<string>();
//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。