シングルトンパターンに問題があります。C#シングルトンオブジェクトの多くのインスタンス
本当に奇妙ですが、私のシングルトンパターンは2つまたは3つのインスタンスのようです。 私のウェブサイトは、タイマー付きのアクションサイトです。私は自分のシングルトンオブジェクトでタイマーと価格を処理しています。
何が起こっているのは、一部の人々がいくつかの価格を見て、他の人々が異なるネットワークにいるときに常に他の価格を見ているということです。
例えば、私のオフィスでは、オークションは0.56セント、誰もが同じですが、別のネットワーク、たとえば私の家では0.55セント、タイマーは異なる値を示しています。
これは、私が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
方法で、私はそのアクションをやっている人ログインします。
この後、私たちはいくつかのテストを行い、ログファイルをダウンロードしました。
私の驚いたことに、「New Singleton Instance bla」というのは正解です。しかし、異なるGUIDを持つメソッドSomeAction
への多くの呼び出しは奇妙です。
オブジェクトが静的コンストラクタでのみ作成されていることを確認しました。手動での作成がないことも確認しました。
詳細については、これは私のプロダクションサーバー(goDaddyホスティング)でのみ発生します。私は私のウェブサイトのための複数のアプリケーションプールがあるかどうか尋ねました、そして、彼らはただ1つのアプリケーションプールがあると言います。
[ここ](http://csharpindepth.com/Articles/General/Singleton.aspx)のようにシングルトンを実装してみてください。 –
私は静的コンストラクタを作成した理由を考えていましたか? – FosterZ
おそらく、Disposeロギングを使用して問題を診断し、あらゆる場所でTryキャッチを追加することができます。がんばろう。 – CodingBarfield