別件でいろいろ調べている途中で見つけたスライドです。
ASP.NET MVC は今までの Web Forms と仕組みが異なるので、パフォーマンス的にはどのくらいの差が有るのかと思っていましたが、書き方次第ではかなり性能が落ちてしまうようです。
要約すると
- リンク URL 作成には Expression を使わない
- その中でも Url.Action よりも Url.RouteUrl のが有利
- 匿名型でパラメータを渡さない
- リフレクションを使って RouteValueDictionary に追加するので遅くなる
- といっても Url.RouteUrl と併用すると、 Expression や Url.Action を使ったときよりも早い
- コレクション初期化子を使って RouteValueDictionary を作成し、渡したほうが良い
- リフレクションを使って RouteValueDictionary に追加するので遅くなる
- LINQ to SQL クエリ式は前もってコンパイルしておく
- Expression Tree をあらかじめ作っておいて使いまわすような感じなのかな?
- RenderPartial を呼びすぎない
- ループ内で RenderPartial を呼ぶのではなく、パーシャルビューの中でループを回す
- 作成した URL をキャッシュする
- 通常は URL が実行中にころころ変わることは無い -> じゃあキャッシュしてしまおう、重いし
- データをキャッシュしよう
- MVC に限らず、キャッシュはしましょう
個人的には Url.Action より Url.RouteUrl のが早いというのに驚いたり。
特に差は無いと思ったのですが、冷静に考えると名前だけの検索で済む RouteUrl とルーティングパラメータまで探索する必要がある Action なら、RouteUrl のが早いですよね。