У меня проблема с шаблоном Singleton.
Это действительно странно, но похоже, что есть два или три экземпляра моего Singleton Pattern. Мой сайт, это сайт действий, с таймерами, и я обрабатываю эти таймеры и цены с помощью моего Singleton Object.
Что происходит, так это то, что некоторые люди видят некоторые цены, а другие люди всегда видят другие цены, когда они находятся в разных сетях.
Например, в моем офисе мои люди видят аукцион на уровне 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
, я регистрирую, кто выполняет это действие.
После этого мы сделали пару тестов и загрузили файл журнала.
К моему удивлению, я вижу только один "New Singleton Instance bla", который является правильным. но затем многие вызовы метода SomeAction
с разными GUID, что странно.
Я проверил, что объект создается только в статическом конструкторе, и я также проверил, что в нем нет никакого ручного создания.
Для получения дополнительной информации это происходит только на моем рабочем сервере, который является хостингом goDaddy. Я спросил, существует ли более одного пула приложений для моего сайта, и они говорят, что есть только один пул приложений.