2010-09-30 17 views
62

Wichtiges Update: Siehe Update 5 unten gibt es keine Performance-Problem in asp.net MVC 3, das ist ein Benchmark-EmissionASP.NET MVC 3 Razor -leistung

ich eine einfache Hallo Welt gemacht haben Projekt in asp.net mvc2,3 aspx und 3 Rasierer und Benchmarked sie. Was ich sehe ist:

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 

Was ist los mit Rasiermesser, es ist so langsam?

Update: Ich habe den Test wiederholt. Alle 4 virtuellen Test-Verzeichnisse verwenden den gleichen .net 4 App-Pool für den integrierten Modus. Alle Projekte werden mit einem neuen leeren x-Projekt erstellt und 1 Seite mit 1 Linientext und ohne Code hinzugefügt. Alle Websites werden im Freigabemodus kompiliert. Mein System ist Windows 7, 4 GB i7 4 Kerne. Ich habe den Test 2 Mal ausgeführt, um IIS aufzuwärmen, und dies sind die Ergebnisse des zweiten Laufs. Apache Bank Parameter: ab -n100000 -c1000 Ergebnisse:

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% 

Update 2 Scott Guthrie in seinem Blog beantwortet:

Wir haben noch nicht vollständig optimiert MVC3 (es gibt in der Regel ein viel Cache-Tuning machen wir). Wir erwarten, dass Rasierklingen die gleiche Leistung wie die ASPX View-Engine aufweisen, bevor sie veröffentlicht wird.

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

Update 5 alle Tests im Release-Modus gemacht, aber war das Problem debug="true" in meiner web.config-Datei (die auch baut Effekte release), nach dem Wechsel auf false, Problem behoben. Und es ist interessant, wie es in dieser Größenordnung nur rasiermesserschablonen funktioniert. Dies sollte bei Bereitstellungen im Hinterkopf bleiben.

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

Dank asp.net mvc team, ausgezeichnete Arbeit!

+10

Wie haben Sie den Benchmark durchgeführt? Wurde Ihre Site im Modus "Release" auf IIS bereitgestellt? Haben Sie die [''](http://www.aspdotnetfaq.com/Faq/What-does-deployment-retail-true-attribute-in-machine-config-file- verwendet means.aspx) Abschnitt in Ihrer machine.config? Denken Sie auch daran, dass ASP.NET MVC 3 immer noch stark entwickelt ist und Sie daher nicht erwarten können, dass es vollständig optimiert ist. Warten Sie mindestens, bis es RTM erreicht. –

+0

+1 Darin - kann nicht erwarten, dass ein Produkt in Alpha/Beta-Stufen vollständig optimiert wird. – Oded

+0

Das ist eine perfekte Antwort, warum würden Sie es als Kommentar einreichen? – Slavo

Antwort

25

Dank für die aktualisierten Zahlen (neue Antwort auf Ihre RC2 Zahlen reagieren). Einige Punkte:

  1. Ihre Aspx Zahlen sehen gut aus, in dem Sinne, dass wir MVC3 Aspx sein gleichauf mit MVC2 Aspx (etwas langsamer in solchen Hallo Welt Beispiel wird erwartet)
  2. Ihre Razor Zahlen erwarten schau verdächtig. Wir wissen, dass Razor ein wenig langsamer ist als der äquivalente Aspx, jedoch sollte der Unterschied nicht größer als 5% -7% sein. Ihre Zahlen zeigen 50% langsamer an, was einfach nicht mit unseren Ergebnissen übereinstimmt. Überprüfen Sie, ob das Projekt in Release kompiliert wird und dass Sie debug="false" in web.config festgelegt haben.
  3. Ihre CPU-Auslastung ist ein wenig verdächtig. Bei 1000 gleichzeitigen Anfragen sollte die CPU zu 100% genutzt werden. (Selbst 8 gleichzeitige Anfragen sollten ausreichen, da Sie 8 virtuelle Kerne haben)
  4. Ihre Tests werden für ca. 20-25 Sekunden ausgeführt.Das ist ein bisschen zu niedrig, weil ein kurzer (1-2 Sekunden) Ausbruch von Aktivität an einem anderen Ort im System Ihre Ergebnisse ziemlich deutlich hinauswerfen könnte.
  5. Bezogen auf Punkt 4, haben Sie jedes Szenario einmal oder ein paar Mal ausgeführt? Sehen Sie viel Unterschied in den Ergebnissen? Da Ihr Betriebssystem andere Dinge im Hintergrund ausführt, ist es typisch, dass zwischen den Läufen unterschiedliche Ergebnisse angezeigt werden.
+0

vielen Dank Marcind, # 2 löste das Problem, ich habe im Release-Modus in allen Tests kompiliert, aber nicht debuggen = true in web.config. Falsche Einstellung hat das Problem behoben. Ich aktualisiere meine Frage dazu und poste auch einen Kommentar zu haackeds Blog. RPC im Rasierer ist 3940 nach diesem chage. – sirmak

+3

Kein Problem. Sie müssen vorsichtig sein, wenn Sie perf messen. – marcind

19

Wie haben Sie den Benchmark durchgeführt? Wurde Ihre Site im Modus "Release" auf IIS bereitgestellt? Haben Sie den Abschnitt <deployment retail="true" /> in Ihrer machine.config verwendet? Denken Sie auch daran, dass ASP.NET MVC 3 immer noch stark entwickelt ist und Sie daher nicht erwarten können, dass es vollständig optimiert ist. Warten Sie mindestens, bis es RTM erreicht.

+0

ja im Freigabemodus auf iis 7.5. Ich habe mit ab (Apache Benchmark) getestet und 50.000 Anfragen mit 500 - 1000 Clients ausgeführt. Ich habe es zweimal getestet und diese Zahlen sind die zweiten Ergebnisse (die ersten sind niedriger). Ich weiß, dass es in der Entwicklung ist, aber nicht sicher, 3x Leistungssteigerung ist nach der Optimierung möglich. – sirmak

+0

Warum sind Sie sicher, dass 3x Optimierung nicht möglich ist? Das ASP.NET-Team hat bereits festgestellt, dass der Razor-Parser noch nicht optimiert ist. –

+0

Beta 1 veröffentlicht und rasiermesser rps fiel auf 1550. – sirmak