しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

ASP.NET MVC のパフォーマンス戦略

別件でいろいろ調べている途中で見つけたスライドです。

ASP.NET MVC Performance

ASP.NET MVC は今までの Web Forms と仕組みが異なるので、パフォーマンス的にはどのくらいの差が有るのかと思っていましたが、書き方次第ではかなり性能が落ちてしまうようです。

要約すると

  • リンク URL 作成には Expression を使わない
    • その中でも Url.Action よりも Url.RouteUrl のが有利
  • 匿名型でパラメータを渡さない
    • リフレクションを使って RouteValueDictionary に追加するので遅くなる
      • といっても Url.RouteUrl と併用すると、 Expression や Url.Action を使ったときよりも早い
    • コレクション初期化子を使って RouteValueDictionary を作成し、渡したほうが良い
  • LINQ to SQL クエリ式は前もってコンパイルしておく
    • Expression Tree をあらかじめ作っておいて使いまわすような感じなのかな?
  • RenderPartial を呼びすぎない
    • ループ内で RenderPartial を呼ぶのではなく、パーシャルビューの中でループを回す
  • 作成した URL をキャッシュする
    • 通常は URL が実行中にころころ変わることは無い -> じゃあキャッシュしてしまおう、重いし
  • データをキャッシュしよう
    • MVC に限らず、キャッシュはしましょう

個人的には Url.Action より Url.RouteUrl のが早いというのに驚いたり。

特に差は無いと思ったのですが、冷静に考えると名前だけの検索で済む RouteUrl とルーティングパラメータまで探索する必要がある Action なら、RouteUrl のが早いですよね。