ASP.NET の静的変数のライフサイクルを理解する
ASP.NET では、ページ クラス内 (Global.asax
の外側) で宣言され、Page_Load
で初期化された静的変数が、アクティブなセッションであっても予期せずリセットされることがあります。この動作は、静的変数と ASP.NET の動的コンパイルの性質に起因します。
静的変数がリセットされる理由
ASP.NET 静的変数は、アプリケーション ドメインの存続期間にわたって存在します。 これらは、アプリ ドメインが再起動されるか、含まれるクラスが置き換えられるとリセットされます。 ASPX ページは動的にコンパイルされるため、ASP.NET はページ クラスを再コンパイルし、効果的に新しいインスタンスを作成し、静的変数をリセットする可能性があります。
クラス置換時の静的変数の損失の防止
アプリ ドメインの再起動では必然的に静的変数がリセットされますが、クラス置換による損失を軽減できます。 解決策は、ASPX ページと App_Code
ディレクトリから静的変数を再配置することです。別のアプリケーション モジュール内に別の静的クラスを作成することをお勧めします。
重要な考慮事項
静的変数はアプリケーション プールごとにあることに注意してください。 マルチプール展開には、静的変数の個別のセットがあります。 また、静的変数は本質的にスレッドセーフではないため、マルチスレッド アクセスには明示的な同期メカニズムが必要です。
ASP.NET の静的変数の代替
データの永続性の信頼性を高めるために、静的変数のリセットに問題がある場合は、静的変数の代替手段を検討してください。 カスタム クラスを含むデータベースは永続的なストレージを提供しますが、Session State
はユーザーごとのデータの永続性を提供します。 Application State
もメモリに常駐し、アプリ ドメインの再起動時に失われるため、
以上がアクティブなセッションにもかかわらず、ASP.NET の静的変数がリセットされるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。