2009-06-21 6 views
0

イメージをデータベースに格納するWebアプリケーション。Asp.netのキャッシュとw3pメモリの使用

最初のセットアップでは、asp.netキャッシュにサイズ変更されたデータベースからのイメージを格納していました。これはすべてうまいですが、Webがより多くのヒットを得るようになったので、私たちは奇妙な問題を経験し始めました。奇妙なことに、私は奇妙なことを意味しています - w3pから細部まで何もせずに、数々の場所で発生するランダムOutOfMemoryExceptionsまで。

ここではasp.netキャッシュが誤用されている可能性があるので、イメージキャッシュを書き直してファイルシステムに戻しました。私たちのイメージハンドラは、キャッシュされたイメージがキャッシュされていないかどうかチェックし、イメージが存在しなければデータベースから取り出し、それをキャッシュディレクトリに保存してそこから提供します。

私にとって気になるのは、このWebサイトのw3pのメモリ使用量です。従来、asp.netキャッシュオブジェクトを使用していたとき、w3pのメモリ使用量は約600MBでした。現在、ハンドラがファイルシステムの画像を扱うとき、典型的なメモリ使用量は約750MBです。どういうわけか、私はそれが(少なくとも少しは)落ちると思ったが、間違いなく上った。これについて何か説明がありますか?

第2に、どのくらいのメモリが使用されているかを確認するためにw3pプロセスを検査する方法はありますか?心に浮かぶのはパフォーマンスカウンターですが、チェックする時間はありませんでした。

+0

なぜプロファイラを使用してメモリを占有しているのか確認できませんか? – RichardOD

答えて

1

これは私の考えではありますが、ファイルI/Oがバッファされている場合は、メモリを大量に使用しませんか?たぶんASPキャッシュよりも、キャッシュされた各リソースをキャッシュから取り出すのではなく、バッファを必要とするため、キャッシュされます。

メモリプロファイリングに関しては、何が起こっているのかを分析するためにそこにいくつかのプロファイラプログラムがあります。

+0

ファイルシステムからのファイルの提供がasp.netのキャッシュでのキャッシュよりも多くのメモリを使用していると言っていますか?私はそれが私のものかどうかわかりませんが、これは間違った/奇妙に聞こえます。誰でもこれを確認できますか? – Vnuk

+0

私はそれが推測だったと言いました - 私は大声で考えていました。 – nickd

+0

私はプロファイラツールを思い出させるためにあなたの答えをチェックしました。 .netメモリプロファイラを使用すると、今度は、画像がいっぱいになったときに、キャッシュ内にもっと多くのページ(文字列)があるように見えます。ありがとう。 – Vnuk

0

あなたはこれらの項目のOutputCacheを無効にしてきたことを確認していますか?必要に応じてサイズ変更されたイメージを作成するかどうかを決定するために動的コードを実行しているように見えるので、まだアクティブなOutputCacheが存在する可能性があります。

+0

「無効なOutputCache」とは何を意味しますか?画像はasp.netハンドラ(ashx)経由で提供されます。 – Vnuk

+0

私は.ashxをあまり使っていませんし、OutputCacheを持つことが可能かどうかは分かりません。プロファイラを使用するのは確かに原因を見つける最良の方法ですが、時間がかかります。それと幸運! – chris166

+0

誰かがこれについて不思議なことがあれば、ashx'esにはOutputCacheがないと思うのですが – Vnuk

0

キャッシュへのイメージの数が増え、プロセスが利用可能なメモリの60%をリッチにすると、asp.netのデフォルトの動作が再開されます。

OutOfMemoryExceptionは、1つのプロセスがリサイクルされ、2番目のプロセスが作成されるが、最初は長時間終了しないとスローされます。次に、2つのプロセスで大量のメモリを使用します。アプリケーションがビジー状態で、多くの要求がある場合は、2つ以上のプロセスが同時に発生する可能性があります。これはOutOfMemoryExceptionにつながります。

ファイルシステムへの画像キャッシュを書き換えました。画像ハンドラが の場合、画像が存在しない場合は のキャッシュディレクトリにあるサイズ変更された画像を確認し、 をデータベースから取り出し、キャッシュ dirに保存してそこから処理します。

これはこれに最適な解決策です。 FileSystemはOSレベルでキャッシュされます。

+0

これは最高の解決策だと思いますが、w3pのメモリ使用量の増加についてどう説明しますか? – Vnuk

関連する問題