我遇到了Singleton模式的問題。C#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");
}
}
在這段代碼中,我生成構造器的令牌,並記錄新辛格爾頓的創建,然後......在SomeAction
方法,我記錄誰在做這個動作。
之後,我們做了一些測試並下載了日誌文件。
令我驚訝的是,我看到只有一個「新的單身實例bla」,這是正確的。但隨後,許多用不同的GUID調用SomeAction
方法,這很奇怪。
我檢查到,該對象只在靜態構造函數中創建,並且我還檢查了沒有手動創建任何地方。
欲瞭解更多信息,這隻發生在我的生產服務器,這是一個goDaddy託管。我問過我的網站是否有多個應用程序池,並且他們說只有一個應用程序池。
嘗試按照建議實施你的單身人士[這裏](http://csharpindepth.com/Articles/General/Singleton.aspx)。 –
我在想爲什麼你創建了靜態構造函數? – FosterZ
也許你可以使用一些Dispose日誌記錄和添加TryCatch來診斷問題。祝你好運。 – CodingBarfield