ASP.NET実践:アプリケーション状態で値を保存する

2188 ワード

アプリケーションの状態はASP.NETアプリケーションのすべてのクラスで使用可能なデータストア.アプリケーションのステータスは、サーバのメモリに格納され、データベースから情報を格納して取得する場合よりも高速です.セッション・ステータスとは異なり、セッション・ステータスは個別のユーザー・セッションのみを指定し、アプリケーション・ステータスはすべてのユーザーとセッションに作用します.したがって、アプリケーションステータスは、頻繁に使用され、ユーザ間で変更されないデータストレージを少量保存する場合に適している.
HttpApplicationStateクラスにアプリケーションステータスが格納され、ユーザーがアプリケーション内のURLリソースに初めてアクセスすると、新しいHttpApplicationStateクラスのインスタンスが作成されます.HttpApplicationStateクラスはApplication属性によって暴露される.
アプリケーションステータスは、データをObjectタイプとして格納します.そのため、データを取得するときに適切なタイプに変換する必要があります.
アプリケーションステータスがサーバ上のメモリに格納されるため、アプリケーションステータスに膨大なデータが格納されると、サーバのメモリに急速に蓄積されます.アプリケーションが再起動されると、アプリケーションのステータスが失われます.アプリケーションは、Webファームの複数のサーバ間またはWebガーデンの作業者プロセス間で共有できません.最後に、アプリケーションステータスはフリースレッドに基づいているため、アプリケーションステータスに格納されているデータは、組み込まれた同期サポートを提供する必要があります.これらの考慮事項の詳細については、「ASP.NETアプリケーションステータス]と[ASP.NET状態管理の推奨].
アプリケーションのステータスに値を書き込む
  • あなたのアプリケーションで、HttpApplicationStateクラスの変数に値を設定します.次のコード例では、アプリケーション変数Messageを文字列に設定する方法を示します.
    Application["Message"] = "Welcome to the Contoso site.";

  • アプリケーションが起動したときに値をアプリケーションステータスに書き込みます.
  • アプリケーションGlobal.asaxファイルのApplication_Startイベントプロセッサで、アプリケーションの状態変数の値を設定します.従来のAspxページと同様に,HttpApplicationStateクラスも同様にApplicationオブジェクトによって暴露される.次のコード例では、アプリケーション変数Messageを文字列に設定し、変数PageRequestCountを0に初期化する方法を示します.
    Application["Message"] = "Welcome to the Contoso site.";
    
    Application["PageRequestCount"] = 0;

  • ロックされたアプリケーションの状態に値を書き込む
    アプリケーションステータス変数は、複数のスレッドに同時にアクセスできます.したがって、無効なデータが表示されないようにするには、アプリケーションのステータスをロックして、1つのスレッドのみに書き込むことを許可する必要があります.
    ヒント:他のタイプのロックを設定していない限り、アプリケーションのステータスデータを常に1つのロック文で変更する必要があります.詳細については、[マルチスレッドデータ同期]を参照してください.
    ロックされたアプリケーションの状態に値を書き込む
  • アプリケーション変数を設定するコードでSystemを呼び出します.Web.HttpApplicationState.ロックメソッドは、アプリケーションの状態値を設定し、Systemを呼び出す.Web.HttpApplicationState.UnLockメソッドは、アプリケーションのステータスをロック解除し、他の書き込み要求にサービスを提供するために解放します.次のコードの例では、アプリケーションのステータスをロックしてロック解除する方法を示します.コードは変数PageRequestCountの値に1を加えてアプリケーションの状態をロック解除します.
    Application.Lock();
    
    Application["PageRequestCount"] = 
    
        ((int)Application["PageRequestCount"])+1;
    
    Application.UnLock();