0

こんな状況です

私はコンテンツ管理システムに取り組んでおり、最初は管理者ユーザーがコンテンツを入力できる管理側であり、2 つ目はユーザーが管理パネルから管理者によって提供されたコンテンツを表示できるユーザー側です。

ユーザーが私のウェブサイトを閲覧している場合、彼は1つのことだけを行うページにのみアクセスし、ページに従ってデータベースからコンテンツを取得し、そのコンテンツをユーザーに表示します.

問題は、ローカル IIS で Web サイトを実行し、しばらく閲覧して、IIS ワーカー プロセス (w3wp.exe) によるメモリ使用量を追跡すると、ピーク時の使用量が109,292 Kと表示されることです。

これを解決するために、このコードをglobal.asaxファイルに入れました

void Application_EndRequest(object sender, EventArgs e)
{
  GC.Collect(0, GCCollectionMode.Forced);
  GC.Collect(1, GCCollectionMode.Forced);
  GC.Collect(2, GCCollectionMode.Forced);
}

この後、使用量はピーク時の75,980 Kに低下します。

問題は、私はここで正しいことをしていますか? 私はこれを行うべきではないという多くの記事を読んだからですGC.Collect

更新 実際の環境では、これは何もない状況ですGC.Collect()

ここに画像の説明を入力

4

1 に答える 1

4

これが実際の問題であると確信していますか?複数の同時アクセスを試し、メモリの問題が発生していることを確認しましたか?

100MBのメモリはそれほど多くないので、ガベージコレクタはそれを気にしません。プロセスがより多くのメモリを必要とする場合、ガベージコレクタはその仕事を開始します。

強制的なガベージコレクションを実行する必要はほとんどありません。ほとんどの場合、利益よりも害を及ぼします。これはそのような場合の1つであり、メモリ消費の観点からはほとんど何もしませんが、パフォーマンスが低下します。ガベージコレクションはコストがかかり、リクエストが実行されるたびに実行します。

つまり、強制的なガベージコレクションを削除し、実際に問題があることがわかった場合にのみ心配してください。

于 2013-01-31T08:36:54.223 に答える