1

問題が実際に何であるかを説明するのは簡単ではありませんが、私は ;-) を試みます。

ここにいくつかのデータがあります:

  • IIS7 を搭載した Microsoft サーバー (RC2 ではない)
  • 3GB ラム
  • このアプリケーションのみがこのサーバー上にあります
  • SQL 2008 エクスプレス
  • リポジトリ パターン
  • シンプルインジェクター
  • MVCSitemapProvider

さて、問題に進みます。サイトは2秒で読み込まれるため、起動ではありません。アプリプールのリサイクル後。起動後、ページは 200 ミリ秒以下 (またはそれ以上) で読み込まれますが、場合によっては (いつとは言えません。これはランダムであり、リサイクル後ではないため)、最大 2 分以上かかることがあります。

問題を見つけるために一瞥してみました。次のように表示されます。

  • ASP.NET 開始要求: 121456ms (これはランダムです)
  • フィルタ: 2ms
  • コントローラー:26ms
  • ビュー: 298 ミリ秒
  • ASP.NET 終了要求: 0ms

リクエストスタッキングのようなものですが、わかりません。

編集:

そのため、MVC SiteMap Provider 全体を削除しましたが、ファントム パフォーマンスの問題はまだ残っていました。

次に、IIS 構成を確認したところ、AppPool が ApplicationPoolIdentity ではなく NetworkService であることに気付きました (他の MVC ソリューションは ApplicationPoolIdentity で実行されます)。以前と同じように高速に見えます (ページの読み込みは 50 ミリ秒未満)! 問題が解決しない場合は、このスレッドに書き込みます。

4

1 に答える 1

1

上記で説明したものと多少似たアーキテクチャを持つMVC3プロジェクトで、非常によく似た問題がありました。私たちの問題は、MVCSitemapProvider に関連していることが判明しました。特定の問題が何であったかについてのメモを探しますが、テストとして、メニューを作成するサイトマップを無効にすると、すべてが非常に高速であり、元に戻すと遅くなることがわかりました.

問題をデバッグするための次のステップとして、それをお勧めします。

さて、私はプロジェクトの同僚の一人と話し、今思い出しました. いくつかの問題があります。まず、MVC サイトマップ プロバイダーはすべての例外を飲み込みます。これは完全に悪いわけではありませんが、トラブルシューティングを困難にします。わずかに異なる 2 つの問題を引き起こす 2 つの異なるシナリオが見つかりました。どちらも速度低下を引き起こしています。まず最初に、_Layout.cshtml などのレイアウト ファイルに、メニューとパンくずリストを生成するためのプロバイダーへの呼び出しが含まれていると仮定します。

  1. サイトマップで定義していないコントローラー アクションがある場合、そのページに移動するたびに、メニューとブレッドクラムを生成しようとすると例外が次々とスローされ、それらが表示されません。これは非常にコストがかかり、ページダウンが遅くなります。
  2. スペルが間違っているか、存在しないコントローラー アクションを指すノードがサイトマップに定義されている場合、サイトマップがメニューやブレッドクラムをレンダリングしようとするたびに、多くの例外がスローされて飲み込まれます。単一ページ。

サイトマップで発生したこれら 2 つおよびその他の問題のため、サイトマップ ファイルを精査し、その中ですべてのコントローラー アクションを表していること、およびノー​​ドが正しく定義されていないことを確認することを強くお勧めします。完全に確信が持てない場合は、サイトマップ コードにいくつかのブレークポイントを配置し、それをステップ実行して、例外がスローされているかどうかを確認し、そこから逆方向にトレースすることもできます。

于 2012-12-05T18:49:30.343 に答える