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