6

先日、これが気になっていたところです。ASPXがごみ処理をどのように管理するかは正確にはわかりませんが、「読み込みが完了した」場合、静的メモリ値が削除されないか、ページが再読み込みされた後です。少なくともCに関して静的とは、プログラム自体がシャットダウンされるまで、メモリ割り当てがプログラムに従うことを意味します。これはASPXでも同じですか?静的な値があり、ページAからページBに移動する場合、その静的な値は、アプリケーションを離れるまでRAMに保持されますか、それともページAを離れるとその値は削除されますか?(別のWebサイトにアクセスして、サーバーのアプリケーションプールからインスタンスを削除します)。

私が経験したことから:

  public static class foo
  {
      public static int x;
  }

  protected void Page_Load(object sender, EventArgs e)
  {
      foo.x++; //This will continue to increment from the last value before reload
  }
4

2 に答える 2

5

ASP.NETでは静的クラスを避ける必要があります。これらは、アプリケーションが再起動されるまでメモリに残り、多くの同時実行エラーや競合状態の影響を受けます。

また、ユーザーセッション(ブラウザセッション)を閉じても、アプリケーションは再起動しません。ユーザーが離れて戻ってきても、それらはメモリに残ります。したがって、静的クラスは本当に避けてください。

于 2012-06-20T22:00:22.903 に答える
0

これは標準のCLR実行モデルであり、asp.netでも違いはありません。静的オブジェクトはアプリケーションのルートと見なされ、ガベージコレクションされません。

これは、.netでのガベージコレクションの仕組みに関する古い記事ですが、すべての原則は同じだと思います:http: //msdn.microsoft.com/en-us/magazine/bb985010.aspx

于 2012-06-20T21:59:34.827 に答える