ASP.NET Web アプリケーション内のすべてのスレッド/セッションで、クラスや変数などのリソースを共有したいとします。何が良いですか?
1)その静的変数へのスレッドセーフアクセサーを持つ静的変数?
2) それとも ASP.NET アプリケーション セッション変数ですか?
ASP.NET Web アプリケーション内のすべてのスレッド/セッションで、クラスや変数などのリソースを共有したいとします。何が良いですか?
1)その静的変数へのスレッドセーフアクセサーを持つ静的変数?
2) それとも ASP.NET アプリケーション セッション変数ですか?
1つしか持っていない場合、ほとんど違いはありません。
複数ある場合は、変数ではなく静的変数を使用する必要がありApplication
ます。Application.Lock
メソッドはすべての 変数をロックしApplication
ますが、静的変数に個別の同期識別子を使用できるため、各ロックはその特定の変数にアクセスするコードにのみ影響します。
静的メンバーはパフォーマンスが向上しますが、スレッド セーフではないという欠点があります。
Application オブジェクトではなく、アプリケーション クラスの静的メンバーにデータを格納することをお勧めします。これにより、アプリケーション ディクショナリ内の項目にアクセスするよりも高速に静的変数にアクセスできるため、パフォーマンスが向上します。
出典: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607
と:
確かに、セッション変数は、セッション全体の値を保存する場合にのみ使用する必要がありますが、変数を初期化してフォーム間で使用する場合、およびフォーム間で変更された場合は、同じオブジェクトのアプリケーション全体で静的変数を使用する必要があります。
これは、複数のページを通過してデータを収集する一般的なシナリオです。このシナリオでは、Session オブジェクトを使用します。完全なアプリケーションで同じオブジェクトが必要な場合は、静的変数を使用する必要があります。
保持する値がユーザーに依存する場合は、Session を使用します。