15

リクエストごとに(少量の)メモリをリークしているように見えるASP.NET(4.0)Webアプリケーションがいくつかあります。これは非常に少量であるため、ほとんどのユースケースでは、一度に数週間または数か月間問題になることはありません。私は通常、アプリケーションによって管理されている接続をすべて閉じたり、状態変数(またはシングルトンのインスタンス変数)を避けたりすることに長けています。

私の質問はこれです-これはASP.NETアプリケーションの通常の動作ですか?20分間アイドル状態になった後、アプリプールをリサイクルするデフォルト(IIS 7)の動作をオフにしました。これを行うのは、アプリケーションが内部キャッシュを構築するのに数分かかるためです。ユーザーエクスペリエンスに悪影響を与えないようにします(そして、ユーザーがリクエストを発行するときにアプリケーションが起動するのを待つようにします)。

キャッシュをシリアル化するか、キャッシュ生成プロセスを高速化することでこれを軽減できることは承知していますが、私の質問はその原則と関係があります。個人的には、IISの自動リサイクル機能をバンデードアプローチとして利用することを検討しています。私が間違っている?アプリケーションのメモリ使用量が使用可能なメモリの量と比較して十分に高くないため、ガベージコレクタが機能しているのがわかりませんか?または、メモリの問題を深く掘り下げる必要がありますか?

任意の洞察をいただければ幸いです。

4

1 に答える 1

10

残念ながら、それ正常ですが、ほとんどの場合、他の何よりも見苦しいアプリケーション作成者が原因です。

このため、IISはデフォルトで、新しく作成されたアプリケーションプールを1740分ごとにリサイクルするように構成します。

あなたが言ったように、これはバンドエイドです。すべてのリソース(ぶら下がっているイベントハンドラーを含む)をクリアする適切に作成されたアプリケーションは、まったくリークしないはずです。

この件については、このブログ投稿を参照してください。

于 2011-03-03T22:28:19.197 に答える