ASP.NETアプリケーションのステータスの概要

2958 ワード

アプリケーションの状態はASP.NETアプリケーションのすべてのクラスで使用可能なデータストア.アプリケーションのステータスは、サーバのメモリに格納され、データベースから情報を格納して取得する場合よりも高速です.セッション・ステータスとは異なり、セッション・ステータスは個別のユーザー・セッションのみを指定し、アプリケーション・ステータスはすべてのユーザーとセッションに作用します.したがって、アプリケーションステータスは、頻繁に使用され、ユーザ間で変更されないデータストレージを少量保存する場合に適している.ユーザーごとの基本データの保存については、「セッションステータスの概要とASP.NETアーカイブ属性の概要].
アプリケーション・ステータスの使用
アプリケーションのステータスは、HttpApplicationStateクラスのインスタンスに格納されます.このクラスはKey/Valueの辞書オブジェクトを暴露した.
HttpApplicationStateインスタンスは、ユーザーがアプリケーション内の任意のURLリソースに初めてアクセスしたときに作成されます.HttpApplicationStateクラスは、HttpContextクラスのApplication属性を使用してアクセスされることが多い.
アプリケーションのステータスを2つの方法で使用できます.直接コードで追加、アクセス、またはContentsコレクションの値を削除できます.HttpApplicationStateクラスは、アプリケーションのライフサイクル中の任意の期間にアクセスできます.したがって、アプリケーションが起動したときにアプリケーションステータスデータをロードするためによく使用されます.このようにするには、アプリケーションのステータスをロードするためのコードをGlobalに保存することができます.asaxファイルのApplication_スタートメソッドで.詳細については、「ASP.NETアプリケーションのライフサイクルの概要].
また、Webアプリケーションにオブジェクトを追加するGlobalを宣言で宣言することができます.asaxファイルのStaticObjectsコレクションにあります.この場合、このように定義されたアプリケーション状態は、アプリケーション内の任意の場所のコードによってアクセスすることができる.次の例では、アプリケーションのステータス値のオブジェクト宣言を示します.
<object runat="server" scope="application" ID="MyInfo" 

    PROGID="MSWC.MYINFO">

</object>

GlobalでしかできませんStaticObjectsコレクションにオブジェクトを追加するには、asaxファイルを使用します.コードを使用してオブジェクトを直接コレクションに追加しようとすると、NoSupportedException例外が放出されます.
アプリケーション・セットを参照せずに、アプリケーション・ステータスに格納されているオブジェクト・メンバーにアクセスできます.次のコードの例では、アプリケーション・ステータスのStaticObjectsセットで定義されたオブジェクトのメンバーを参照する方法を示します.
protected void Page_Load(Object sender, EventArgs e)

{

    Label1.Text = MyInfo.Title;

}

アプリケーションのステータスに関する注意事項
アプリケーションのステータスを使用する場合は、次のような重要な注意事項を理解する必要があります.
  • リソース.アプリケーションのステータスがメモリに格納されているため、ディスクまたはデータベースに保存されているデータよりもアクセスが高速です.ただし、アプリケーション・ステータスに格納されている膨大なデータは、サーバのメモリに蓄積され、サーバがページをディスクにキャッシュすることになります.アプリケーションの状態を使用する代わりに、膨大なデータを格納アプリケーションのデータにASPを使用することができます.NETキャッシュメカニズム.ASP.NETキャッシュも同様にメモリにデータを格納するため、速度も非常に速い.ただし、ASP.NETはキャッシュを積極的に管理し、メモリが不足したときにデータ項目を削除します.詳細は、[ASP.NETキャッシュの概要].
  • 揮発性.アプリケーションのステータスがサーバのメモリに格納されているため、アプリケーションが中止されたり、再起動されたりしたときに失われます.例えば、Web.configファイルが変更されると、アプリケーションが再起動され、データベースなどの安定したストレージメディアに書き込まれていないアプリケーションステータスデータが失われます.
  • 伸縮性.アプリケーション・ステータスは、同じアプリケーションにサービスを提供する複数のサーバ間で共有(Webファームなど)されたり、同じサーバの同じアプリケーションにサービスを提供する複数の作業者プロセス間(Webガーデンなど)で共有されたりすることはできません.したがって、アプリケーションは、異なるサーバまたはプロセスにまたがるアプリケーションのステータスに対して同じデータを含むアプリケーションのステータスに依存することはできません.アプリケーションがマルチプロセスまたはマルチサーバ環境で実行される場合、アプリケーション間のデータの忠実性を維持するためには、データベースなどのより多くの伸縮性オプションを使用することを考慮する必要があります.
  • 同時性.アプリケーション・ステータスは、フリー・スレッドに基づいており、アプリケーション・ステータス・データが複数のスレッドで同時にアクセスできることを示します.したがって、アプリケーションステータスデータを更新する際には、組み込み同期を含めてサポートされるスレッドセキュリティスタイルでこのようにすることが重要です.ロックメソッドとUnLockメソッドを使用してデータをロックし、同じ時間に1つのソースにのみ書き込むことができるようにすることで、データの整合性を確保できます.同じようにGlobalで減らすことができますasaxファイルのApplication_Startメソッドでアプリケーションの状態値を初期化したときに同時問題が発生する可能性があります.詳細は、[ASP.NETアプリケーションのライフサイクルの概要].