2011-01-07 7 views
1

asp.netのコレクションの周りにシングルトンラッパーを持っていれば、それをキャッシュする必要がありますか、データはポストバックで永続化されますか?ASP.NETのシングルトン

また、別のユーザーがアプリケーションにログインした場合、アプリケーションは別のインスタンス(それ自体)を作成し、したがってシングルトンの別のインスタンスを作成するか、最初のインスタンスで作成された同じシングルトンにアクセスしますか?

シングルトンの実際の実装は、次のいずれかである: (デザイン1 :)

using System; 

public sealed class Singleton 
{ 
    private static volatile Singleton instance; 
    private static object syncRoot = new Object(); 

    private Singleton() {} 

    public static Singleton Instance 
    { 
     get 
     { 
     if (instance == null) 
     { 
      lock (syncRoot) 
      { 
       if (instance == null) 
        instance = new Singleton(); 
      } 
     } 

     return instance; 
     } 
    } 
} 

又はデザイン2:静的変数は、アプリケーション限り、存在する

public sealed class Singleton 
{ 
    private static readonly Singleton instance = new Singleton(); 

    private Singleton(){} 

    public static Singleton Instance 
    { 
     get 
     { 
     return instance; 
     } 
    } 
} 
+0

シングルトンはどのように実装されていますか? – Oded

+0

まだ実装されていません。おそらくコードに基づいて: using System; 公開密封クラスSingleton { private static volatile Singleton instance; プライベートな静的オブジェクトsyncRoot = new Object(); プライベートシングルトン(){} パブリック静的シングルトンインスタンス {得る {IF(例えば== NULL){ ロック(SyncRootの) {IF(例えば== NULL) インスタンス=新しいシングルトン(); } } return instance; } } } – bleepzter

+1

あなたがしようとしていることを説明して、それを行う方法を提案できますか?おそらく、シングルトンは間違っているか、単純に必須ではないでしょうか? – Oded

答えて

2

シングルトンは、すべての要求に対してインスタンスが1つだけ存在することを確認するパターンです。静的であると宣言しているので、アプリケーションの存続期間中存在します。そして、同じインスタンスがあなたのプロパティを通してオブジェクトを要求している任意のユーザに返されます。

4

アプリケーションが再起動するまで、実行中です。ポストバックとユーザー間に存在します。

この記事では、静的なシングルトンを実装する方法を示しています。http://msdn.microsoft.com/en-us/library/ff650316.aspx

は、あなたがそれをやろうとしているもので、それ以上の要求がシングルトンの実装に影響を与えるありますか?

+0

いいえ、実際はありません。唯一の要件は、必要になるたびにキャッシュからロードするのではなく、すぐにアクセスできる(メモリ内の)すべてのユーザーのデータを格納することです。しかし、もう1つの問題は、個々のユーザーのデータに対して同じことをする必要があることです。シングルトンや静的変数がすべてのユーザー/セッションにわたって存続するため、これを達成する方法はわかりません。または私は間違っていますか? – bleepzter

+0

ユーザごとのデータについては、userId(基本的にセッションの再作成)でデータを格納するSingleton Hashtableを作成するか、データベースに格納する必要があります。 – Greg

関連する問題