У меня проблема с шаблоном Singleton.
Это действительно странно, но похоже, что есть два или три экземпляра моего синглтон-паттерна.
Мой веб-сайт - это сайт действий с таймерами, и я управляю этими таймерами и ценами с помощью моего объекта Singleton.
Что происходит, так это то, что некоторые люди видят некоторые цены, а другие видят другие цены всегда, когда они находятся в разных сетях.
Например, в моем офисе мои люди видят аукцион по цене 0,56 цента, все видят то же самое, но в другой сети, например, у меня дома, я вижу 0,55 цента, а таймеры тоже имеют разные значения.
Сказав это, я протестировал свой Singleton, сгенерировав GUID и записав его в свой лог-файл. Вот код
public class Singleton
{
private static Singleton instance;
private static System.Threading.Mutex mutex;
System.Guid token;
private Singleton() {
token = System.Guid.NewGuid();
Logger.Log("New singleton Instance" + token.toString());
}
static Singleton()
{
instance = new Singleton();
mutex = new System.Threading.Mutex();
}
public static Singleton Acquire()
{
mutex.WaitOne();
return instance;
}
// Each call to Acquire() requires a call to Release()
public static void Release()
{
mutex.ReleaseMutex();
}
public void SomeAction()
{
Logger.Log(token.toString() + " - SomeAction");
}
}
В этом коде я генерирую маркер на конструкторе и регистрирую создание нового Singleton, затем ... в методе SomeAction
я записываю, кто выполняет это действие.
После этого мы сделали пару тестов и загрузили файл журнала.
К моему удивлению, я вижу только один "Новый экземпляр Синглтона", который является правильным. но потом много вызовов метода SomeAction
с разными GUID, что странно.
Я проверил, что объект создается только в статическом конструкторе, и я также проверил, что ручного создания нет нигде.
Для получения дополнительной информации это происходит только на моем рабочем сервере, который является хостингом goDaddy. Я спросил, существует ли более одного пула приложений для моего сайта, и они сказали, что существует только один пул приложений.