ASP.NET 静的変数の有効期間を理解する
概要
ASP.NET では、静的変数はアプリケーションの存続期間全体にわたって値を保持するように設計されています。 ただし、予期しないリセットが発生し、アプリケーションが不安定になる可能性があります。この記事では、この問題の根本原因を調査し、静的変数データを確実に永続的に保存するための解決策を提供します。
問題: 予期しない変数のリセット
ページ クラス内の静的変数を使用して、Web メソッド経由でアクセスされる機密データを管理するシナリオを想像してください。 アクティブなセッションにもかかわらず、これらの変数は理由もなくデフォルト値に戻る場合があります。この予期しない動作により、アプリケーションの信頼性が損なわれます。
静的変数のリセットの原因
2 つの重要なイベントによりアプリケーション ドメインの再起動がトリガーされ、静的変数が効果的にリセットされます。
クラスの再読み込み: ASP.NET は、App_Code フォルダーにある ASPX ページとクラスを動的にコンパイルします。 システムがページまたはクラスの再コンパイルを必要とする場合、既存のクラスが置き換えられ、静的変数データが失われます。
クラス インスタンスの変更: 静的変数は、本質的にその変数を含むクラスに関連付けられます。 コードがクラスの別のインスタンスと対話する場合 (再コンパイルなどにより)、静的変数はリセットされます。
効果的な解決策
いくつかの戦略により、静的変数損失のリスクを軽減できます。
静的クラスの分離: クラスの置換を防ぐには、静的変数を App_Code ディレクトリの外側の別の非 ASPX クラスに保存します。モジュール内の専用の静的クラスを使用することをお勧めします。
データベースの永続性: アプリケーション ドメインの再起動が避けられないことを考慮すると、永続的なデータ ストレージとしてデータベースを使用するのが最も堅牢なソリューションです。カスタム クラスまたはデータベース セッションを使用して、ユーザー固有の情報を処理します。
アプリケーション状態を避ける: アプリケーション状態変数は、メモリ内にあるという性質上、アプリケーション ドメインの再起動時にデータ損失を受けやすいため、この目的には適していません。
スレッドの安全性に関する考慮事項: 静的変数は本質的にスレッドセーフではありません。 lock
キーワードを使用して、複数のスレッドから同時にアクセスする際の競合状態を防ぎます。
以上がASP.NET 静的変数がリセットされるのはなぜですか?それを防ぐにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。