2012-02-23 24 views
1

ASP.NET MVC3アプリケーションでメモリ使用量を確認する最も良い方法は何ですか?MVC3メモリ管理

サイトのスピードを向上させるために、ホスティングプロバイダからIISアプリケーションプールを頻繁に呼び出すように指示されています。これは「推奨練習」ですか?確かに、毎回アプリケーションを再起動する必要はありませんか?私はむしろそれが私のアプリケーションでのメモリ使用の問題であるかどうかを見つけ出して修正するだろう。したがって、あなたが使用しているヒント&のヒントも非常に役に立ちます。

このアプリケーションは、ASP.NET MVC3、C#およびEFコードファーストに基づいています。任意の指導、リンクが高く評価されました。

編集: 投稿後にこのページが見つかりました。これは非常に便利です。しかし、私はまだ他の意見を聞きたいです。

ASP.NET MVC and EF Code First Memory Usage

デフォルトIISによって

+0

非常に便利です – MikeSW

答えて

0

は間隔で自動的にアプリケーションプールをリサイクルする(私は29時間程度だと思います)が、それは確かに、どんなに小さなまたはどのように、ホストによって設定されていませんありがとうプロセスが使用している多くのメモリが使用されています。リサイクルトリガは、時間間隔またはプロセスが特定のメモリ使用制限に達したときに発生します。いずれの共有ホストにも設定されていることを確信しています。

メモリの使用については、おおよその使用方法を示すGC.GetTotalMemoryメソッドを使用できます。 Perfmonを使用している場合でも、読み取り値はあまり正確ではありませんが、それはあなたにアイデアを与えます。

//global.asax.cs 
void Application_EndRequest(object o,EventArgs a) 
{ 
    var ctype=Context.Response.Headers["Content-Type"]; 
    if (ctype == null || !ctype.Contains("text/html")) return; 
    Context.Response.Write(string.format("<p>Memory usage: {0}</p>",GC.GetTotalMemory(false))); 
} 

を使用すると、使用量が中GCキックまで増加増加し、使用量がより「現実的な」値に低下します表示されますのでご注意ください。の

  • 適切なレイヤー:あなたがお金を持っている場合

    私は、このようなアプリケーションは、メモリやパフォーマンスの問題がある場合は、少なくとも準備するために行うことができますMemory profiler

    他のもののような特殊なツールをお勧めしますアプリケーションは、他のコンポーネントに影響を与えることなく、より効率の悪い部品をリファクタリングできることを意味します。

  • リポジトリパターンは非常に役に立ちます。なぜなら、EFを使用したり、見つかったリンクのようにEFが多くのメモリを使用していることを確認したりできます。しかし、PetaPocoまたはDapperを使用するようにリポジトリ実装を切り替えることができます。ネット。
  • 一般に、OR \ Mは重いライブラリです。アプリケーションにORM機能は必要なく、dbで作業するには、上記のようなmico-Ormを最初から使用します。
  • IDisposableを実装しているオブジェクトは、常に破棄してください。
  • 大きなDBレコードを処理する場合は、ページネーションを使用します。また、サーバーのリソースの使用状況とユーザーの両方の経験のために
  • はYAGNI(あなたAINTゴナがそれを必要とする)可能な限り原則を適用する良いことだ、これは何とかTDDのビットを意味します:)
3

私は決してサイトを持っていますリサイクル(毎週マシンを再起動するまで)

あなたのアプリケーションは一般的にうまく動作します。そうでなければ、いくらかのリークがあります。

  1. キャッシュが
  2. キャッシュが
  3. セッションストレージなど、
  4. アウトObjectContextsが配置されておらず、セッションに保管ん
  5. オブジェクトを成長させ、決して回続けて無期限に有効期限が切れることはありませんので、これが発生する可能性があります処分すべきでないものはありません

  6. 依存性注入コンテナar各リクエストの後に解放するように設定しないでください。そのため、潜在的に内部のコレクションが増え続ける可能性があります。

さらに多くの原因がありますが、これは主なものです。

は、そこで問題は、本当に「何のベストプラクティスはありません - それはあなたのアプリケーションに依存」ですあなたは再起動が速いことができ、現在の要求が許可されている心に留めておく、再起動時に現在のセッションを心配している場合

(時には)完了し、認証トークンを形成することは再起動時にも存続しますが、アウトプロセス状態サーバーを構成しない限り、セッションは維持されません。

メモリ使用量が増え続ける場合は、再起動スケジュールを設定します。それ以外の場合は、1週間に1回または決して実行しないでください。または、メモリがXYZに移動してリセットされます。 HosterがmemoryLimitに設定した内容に基づいて、特定のしきい値に達すると自動的にASP.NETが再起動します。 http://msdn.microsoft.com/en-us/library/7w2sway1.aspx