方法 : アプリケーション状態の値を保存する
更新 : 2007 年 11 月
アプリケーション状態は、ASP.NET アプリケーションのすべてのクラスが使用できるデータ リポジトリです。アプリケーション状態はサーバーのメモリに格納されるので、データベースに情報を格納して取得するより高速です。個々のユーザー セッションに固有のセッション状態とは異なり、アプリケーション状態はすべてのユーザーとセッションに適用されます。したがってアプリケーション状態は、ユーザーによって変わることのない、頻繁に使用される少量のデータの格納に便利な場所です。
アプリケーション状態は HttpApplicationState クラスに保存され、そのインスタンスはユーザーがアプリケーションの任意の URL リソースに初めてアクセスする際に新しく作成されます。HttpApplicationState クラスは、Application プロパティによって公開されます。
アプリケーション状態には、Object 型でデータが格納されます。したがって、データを取得するときは、適切なデータ型に変換して戻す必要があります。
アプリケーション状態はサーバーのメモリに格納されるので、アプリケーションのデータを大量に格納すると、すぐにサーバーのメモリを占有してしまいます。アプリケーションを再起動すると、アプリケーション状態のデータは失われます。アプリケーション状態は、Web ファームの複数のサーバー間、または Web ガーデンのワーカー プロセス間では共有されません。最後に、アプリケーション状態はフリー スレッドなので、アプリケーション状態に格納されるすべてのデータは組み込みの同期機能をサポートする必要があります。これらの考慮事項の詳細については、「ASP.NET のアプリケーション状態の概要」と「ASP.NET の状態管理に関する推奨事項」を参照してください。
アプリケーション状態に値を書き込むには
アプリケーションで、HttpApplicationState クラスに変数の値を設定します。
アプリケーションの Message 変数を文字列に設定する方法のコード例を次に示します。
Application("Message") = "Welcome to the Contoso site."
Application["Message"] = "Welcome to the Contoso site.";
アプリケーションの起動時にアプリケーション状態に値を書き込むには
アプリケーションの Global.asax ファイルの Application_Start ハンドラで、アプリケーション状態の変数の値を設定します。通常の .aspx ページと同様に、Application オブジェクトを使用して HttpApplicationState クラスが公開されます。
アプリケーションの Message 変数を文字列に設定し、PageRequestCount 変数を 0 に初期化する方法のコード例を次に示します。
Application("Message") = "Welcome to the Contoso site." Application("PageRequestCount") = 0
Application["Message"] = "Welcome to the Contoso site."; Application["PageRequestCount"] = 0;
ロックを使用してアプリケーション状態に値を書き込むには
アプリケーション状態の複数の変数には、マルチスレッドを使用して同時にアクセスできます。したがって、無効なデータが生成されないようにするために、値を設定する前にアプリケーション状態をロックして 1 つのスレッドのみが書き込むことができるようにする必要があります。
メモ : |
---|
他の種類のロックを設定している場合を除いて、アプリケーション状態のデータは常にロック ステートメントの中で変更する必要があります。詳細については、「マルチスレッド処理のためのデータの同期」を参照してください。 |
ロックを使用してアプリケーション状態に値を書き込むには
アプリケーションの変数を設定するコードで、HttpApplicationState.Lock メソッドを呼び出してアプリケーション状態の値を設定します。次に、HttpApplicationState.UnLock メソッドを呼び出してアプリケーション状態をアンロックし、他の書き込み要求のためにアプリケーション状態を解放します。
アプリケーション状態のロックとアンロックを行う方法のコード例を次に示します。このコードは、PageRequestCount 変数の値を 1 だけインクリメントしてからアプリケーション状態をアンロックします。
Application.Lock() Application("PageRequestCount") = _ CInt(Application("PageRequestCount")) + 1 Application.UnLock()
Application.Lock(); Application["PageRequestCount"] = ((int)Application["PageRequestCount"])+1; Application.UnLock();