У меня есть некоторый SomeSingleton
класс в C# (.NET 3.5, если это имеет значение) и код:Когда сборщик мусора соберет Синглтон?
foo()
{
...
SomeSingleton.Instance.DoSomething();
...
}
Мой вопрос: когда будет сборщика мусора собрать этот объект Singleton?
p.s: код SomeSingleton:
private static SomeSingleton s_Instance = null;
public static SomeSingleton Instance
{
get
{
if (s_Instance == null)
{
lock (s_InstanceLock)
{
if (s_Instance == null)
{
s_Instance = new SomeSingleton();
}
}
}
return s_Instance;
}
}
Спасибо за помощь!
EDIT (с объяснением):
В Widnows услуг У меня есть код:
...
FirstSingleton.Instance.DoSomething();
...
public class FirstSingleton
{
(Instance part the same as in SomeSingleton)
public void DoSomething()
{
SomeSingleton.Instance.DoSomething();
}
}
То, что я хочу добиться: меня не волнует, что происходит с FirstSingleton, но SomeSingleton запускает таймер с его первым использованием, поэтому мне нужно, чтобы SomeSingleton существовал (так что таймер может запускать новый поток каждый период времени), пока работает моя служба.
Как я понимаю из ваших ответов, все это произойдет, потому что ссылка на мой FirstSingleton и SomeSingleton статична, и одиночные игры не будут собираться GC до тех пор, пока служба не перестанет работать, верно? :)
Я считаю, что его, когда приложение заканчивается (вдоль с остальной статикой) (при условии, что ссылка не удалена) – Sayse
Это никогда не будет собирать мусор, пока и до тех пор, пока вы не установите 's_Instance' в' null', и у вас нет других ссылок того же –
. как ваш код: Никогда. И это не имеет значения для вас. Когда вы беспокоитесь об Dispose (! = Collect), спросите об этом. –