2012-06-20 11 views
6

先日私はこれを疑っていました。私はASPXがどのようにごみ処理を管理しているのか正確には分かっていませんが、「終了した読み込み」では静的なメモリ値が削除されない、またはページが読み込まれた後にはわかりません。少なくともCの点で静的とは、プログラム自体がシャットダウンされるまでメモリの割り当てがプログラムの後に続くことを意味します。これはASPXと同じですか?私が静的な値を持っていて、ページAからページBに行くと、その静的な値は、アプリケーションを終了するまでRAMに永続的に保持されますか? (別のWebサイトに移動して、そのインスタンスをサーバーのアプリケーションプールから削除する)。私が経験してきたものから、ASP.NETの静的オブジェクトはメモリの無駄ですか?

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 
    } 
+0

http://stackoverflow.com/questions/1714064 –

+0

http://stackoverflow.com/questions/1563171 –

+0

http://stackoverflow.com/questions/3814608 –

答えて

5

静的クラスは、ASP.NETに避けるべきです。アプリケーションが再起動され、多くの同時実行エラーと競合状態が発生するまで、メモリに残ります。

ユーザーセッションを終了すると(ブラウザセッション)、アプリケーションが再起動されません。ユーザーが去って戻っても、彼らは記憶に残ります。だから、本当に本当に静的クラスを避けてください!

+0

あなたには、このテーマについてもっと触れますか?私はそれについてもっと学ぶことに興味があります。 –

+0

あなたの質問のコメントにあるリンクを見てください。また、http://bytes.com/topic/c-sharp/answers/878381-static-variable-hell-asp-netやこちらをご覧くださいhttp://www.foliotek.com/devblog/avoid-static- variables-in-asp-net/StackOverFlowにもたくさんの投稿があります。 –

+2

いくつかの場合、実際にアプリケーション全体で情報を共有する必要がある場合は、静的変数を使用する必要があることに注意してください。しかし、私はむしろこの場合にシングルトンを使用します。 –

0

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

これは、ガベージコレクションが.NETでどのように機能するかについての古い記事ですが、私はすべての原則はまだ同じであることを考える:http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

関連する問題