2009-05-21 8 views
7

ASP.NET Webアプリケーション内のすべてのスレッド/セッションでクラスや変数などのリソースを共有したいとします。何が良いですか?何が良いですか:静的変数V.S. Asp.NETアプリケーションセッション?

1)その静的変数に対するスレッドセーフなアクセサを持つ静的変数?

2)またはASP.NETアプリケーションセッション変数?

+3

これはhttp://stackoverflow.com/questions/303725/asp-net-application-state-vs-aのデュープです-static-object –

+0

Ahh ok ...私はそれを見ませんでした...私はこの質問を閉じればいいですか? – 7wp

答えて

7

これらのうちの1つしか持っていない場合、ほとんど違いはありません。

複数ある場合は、Application変数ではなく静的変数を使用する必要があります。 Application.LockメソッドはすべてApplicationの変数をロックしますが、静的変数には個別の同期識別子を使用できます。そのため、各ロックはその特定の変数にアクセスするコードにのみ影響します。

+0

サイトがウェブファーム内にある場合はどうなりますか?あなたはこれの例を持っていますか? – Choco

+0

@Choco:サーバー間でデータを送信するときと同じオブジェクトを共有することはできません。ここにオプションの概要を示す記事があります:http://www.codeproject.com/Articles/180726/State-management-and-ways-to-handle-Cache-in-a-Web – Guffa

0

これは、複数のページを通過してデータを収集する一般的なシナリオです。このシナリオでは、私はセッションオブジェクトを使用します。静的変数は、完全なアプリケーションが同じオブジェクトを必要とするときに使用する必要があります。

保持したい値がユーザーに依存する場合は、「セッション」を使用します。

0

実際のセッション変数は、セッション全体の値を保存する場合にのみ使用する必要がありますが、変数を初期化してフォーム間で使用したい場合や、同じオブジェクトの静的変数を使用する必要があります全体のアプリケーションを介してご利用いただけます。

4

スタティックメンバーがより良いパフォーマンスを提供しますが、下側は、彼らがスレッドセーフではありませんです。

あなたがアプリケーションクラスの静的メンバではなく、Applicationオブジェクトにデータを保存することをお勧めします。これにより、アプリケーションディクショナリの項目にアクセスするよりも静的変数にすばやくアクセスできるため、パフォーマンスが向上します。 http://support.microsoft.com/default.aspx?scid=kb;en-us;Q312607

と::

から

http://weblogs.asp.net/plip/archive/2003/12/01/40526.aspx

関連する問題