web-dev-qa-db-ja.com

ASP.NET MVC 3 Razorのパフォーマンス

重要な更新:下部の更新5を参照してください。asp.netmvc 3にはパフォーマンスの問題はありません。これはベンチマークの問題です

Asp.net mvc2,3 aspxおよび3剃刀で簡単なHello Worldプロジェクトを作成し、ベンチマークを行いました。私が見るものは:

System                  Requests per second
-------------------------------------------
asp.net mvc 2 ASPX                     4200
asp.net mvc 3 Beta 1 ASPX              3200
asp.net mvc 3 Beta 1 Razor             1700

カミソリの何が問題なのですか、とても遅いのですか?

更新:テストをやり直しました。 4つのテスト仮想ディレクトリはすべて、同じ.net 4統合モードアプリプールを使用します。すべてのプロジェクトは、新しい空のxプロジェクトを追加し、1行のテキストでコードなしで1ページを追加することで完了します。すべてのサイトはリリースモードでコンパイルされます。私のシステムはWindows 7、4 GB i7 4コアです。 iisをウォームアップするためにテストを2回実行しましたが、これらは2回目の実行結果です。 Apacheベンチパラメーター:ab -n100000 -c1000結果:

System         Requests per second   CPU Utilization
----------------------------------------------------
asp.net 4                     4780               43%
mcv 2                         4322               58%
mvc 3 beta 1 aspx             2324               54%
mvc 3 beta 1 razor            1615               54%

更新2 Scott Guthrieが彼のブログで答えています:

MVC3はまだ完全には最適化されていません(通常、多くのキャッシュチューニングが行われます)。かみそりは、最終的にリリースされる前の.aspxビューエンジンと同じパフォーマンスになると予想されます。

System         Requests per second   CPU Utilization
----------------------------------------------------
mvc 3 rc1 razor               1960               54%
mvc 3 rc2 razor               2187               54%
mvc 3 rc2 aspx                4014               58%

更新5すべてのテストはリリースモードで行われましたが、問題はdebug="true" web.configファイル(リリースビルドにも影響します)で、falseに変更した後、問題が修正されました。そして、このスケールでカミソリのテンプレート化のみがどのように影響するかは興味深いです。これは、デプロイメントに関して考慮すべきです。

System         Requests per second   CPU Utilization
----------------------------------------------------
mvc 3 rc2 razor               3940               58%
mvc 3 rc2 aspx                4100               58%

Asp.net mvcチーム、すばらしい仕事に感謝します!

64
sirmak

(RC2番号に応答する新しい回答)

更新された数字をありがとう。いくつかのポイント:

  1. MVC3 AspxがMVC2 Aspxと同等であると予想されるという意味で、Aspxの数値は良好に見えます(このようなHello Worldの例では少し遅いことが予想されます)
  2. あなたのカミソリ番号は疑わしいようです。 Razorは同等のAspxよりも少し遅いことはわかっていますが、違いは5%〜7%を超えてはなりません。数値は50%遅いことを示していますが、これは結果と一致しません。リリースでプロジェクトがコンパイルされ、debug="false" web.configで設定します。
  3. CPU使用率が少し疑わしい。 1000の同時リクエストでは、CPUを100%利用する必要があります。 (8つの仮想コアがあるため、8つの同時要求でも十分です)
  4. テストは約20〜25秒間実行されます。システム内の他の場所での短時間(1〜2秒)のアクティビティのバーストにより、結果が大幅に低下する可能性があるため、これは少し低めです。
  5. ポイント4に関連して、各シナリオを1回または2、3回実行しましたか?結果に大きなばらつきがありますか? OSはバックグラウンドで他のことをしているため、実行ごとに異なる結果が表示されるのが一般的です。
26
marcind

どのようにしてベンチマークを実行しましたか?サイトはIISモードリリースで展開されましたか? <deployment retail="true" /> machine.configのセクション?また、ASP.NET MVC 3はまだ開発中のため、完全に最適化されることは期待できません。少なくともRTMに到達するまで待ちます。

19
Darin Dimitrov