2 回目の更新 2013 年 10 月 24 日
この問題をデータベース層に絞り込みました。どうやらLINQ2SQLのパフォーマンスの問題です。1 つのクエリで 10 個のエンティティを読み込んでから、それらの 10 個のメイン エンティティの子エンティティを取得するロジックを追加することを想像してください。パフォーマンス チューニングのために、そのデータ取得を 1 つのクエリで実行したいと考えていますが、L2S では合計 11 のクエリでこれを実行します。
- 10 個のメイン エンティティを取得するための 1 つのクエリ
- メイン エンティティごとにn 個の子エンティティを取得するための 10 個のクエリ
オンラインのさまざまなブログや記事で私の調査結果が確認されましたが、これらの記事は数年前のもので、2007 年までさかのぼるものもあります。 L2S がサポートしていない予想される動作。悲しいことですが、データベース レイヤーを再プログラムする必要があるようです。
最初の更新 24.10.2013
ANTS Profiler の助けを借りて、この問題をさらに絞り込みました。ビジネス ロジックと一般的な設計に問題があるようです。既に作成されたバージョンを使用するのではなく、オブジェクトが何度も作成される傾向があることを発見しました。大規模なオーバーホールとコードの最適化を行って、これによりエンド ユーザーが経験する Web サイトのパフォーマンスが向上するかどうかを確認しています。
質問
MVC ビューのレンダリング中に重大なパフォーマンスの問題が発生しています。/Innhold/Mangler にアクセスして Chrome と Internet Explorer でテストしたブラウザ コンソールによると、わずか 2 行のテキストでビューをレンダリングするのに 3.75 秒かかります。
アプリケーションは、Web.config を使用してリリース モードで構築された運用環境で実行されています。
この深刻なパフォーマンスの問題の原因は何ですか? ここでアイデアが不足し始めています。
以下にコードを添付します。
「Feil」と呼ばれる次のビューがあります。
@{
ViewBag.Title = "Feil";
Layout = "";
}
<h2>Feil</h2>
<pre>@ViewBag.Exception</pre>
コントローラー「Innhold」に「Mangler」という次のアクションがあります。
public ActionResult Mangler()
{
ViewBag.Exception = "Det er ikke konfigurert noen nettside for denne lenken.";
ViewBag.Title = "404";
ViewBag.WebsiteID = 0;
return View("~/Views/Shared/Feil.cshtml");
}
Global.asax.cs の Application_Start() で必要な唯一のファイル拡張子を指定するだけでなく、必要な唯一の ViewEngine をクリアして追加しました。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine() { FileExtensions = new string[] { "cshtml" } });
}