Ich bin derzeit mit sehr lästigen Leistungsproblemen nach der Bereitstellung einer ASP.NET MVC4-Anwendung für Microsoft Azure. Unmittelbar nach dem Neustart der App (oder nach ein paar Minuten Inaktivität) dauert das Laden einiger Seiten etwa 15 Sekunden. Danach werden diese Seiten selbst beim Löschen des clientseitigen Cache in etwa 2 Sekunden geladen (was immer noch verbesserungsbedürftig ist, aber deutlich besser als 15 Sekunden, was ein großer Benutzererlebnis-Killer ist).ASP.NET MVC4 Seiten laden extrem langsam auf Microsoft Azure
Hier ist, was ich schon bisher versucht habe:
- ich durch jedes Ereignis in Global.asax, um gekämmt zu Datenbank-bezogenen Code mit Dummy-Code
- die veröffentlichen Ändern der Einstellungen zu ersetzen: «Precompile während der Veröffentlichung» (Merge alle Ausgänge auf einer einzigen Baugruppe)
- nach Azure «App Performance Analysis» meine Anwendung betrachtet wird «gesund»
- «Always On» ist innerhalb des Portals App-Einstellungen (Die Preisstufe aktiviert ist B1 [Basic, 1 Kern, 1 .75GB RAM], daher gehe ich davon aus, dass die Always-On-Schalter nicht durch die gemeinsame Laufzeitkonfiguration überschrieben bekommen)
Da keine der Kugeln über mein Problem gelöst habe ich versucht, einen keppalive-Job zu schreiben, mit Quartz.NET, die die Website wie dies regelmäßig Anfragen:
new System.Net.WebClient().OpenRead("https://foo.azurewebsites.net");
(In meinem Fall, ich glaube, der Effekt ist mehr oder weniger die gleichen wie initializationPages innerhalb Web.Config wie erwähnt here, erklärt nicht es?)
Die Ergebnis: Es funktioniert, aber nur für diese bestimmte URL. Eine Liste aller möglichen Routen zu führen, ist definitiv nicht der richtige Weg.
Haben Sie sich jemals mit diesem Problem beschäftigt? Ich würde Ihre Eingaben sehr schätzen!
Vielen Dank für Ihre Eingabe. Ich habe vergessen zu erwähnen: Die Preisstufe der App ist B1 (weder ein kostenloser noch ein gemeinsamer Plan). Daher denke ich, dass in diesem Fall die "Always on" -Option tun sollte, was sie soll. Ist es nicht? Ich werde die Frage aktualisieren. Mocking HTTP-Anfragen ist genau das, was ich versuche zu vermeiden, da dies bedeuten würde, eine Liste von URLs zu pflegen. – Alan
@Alan ... das ist die Antwort. Ich benutze es für genau Ihre Situation –
Scheint so, als könnten wir nicht über HTTP-Anfragen für jede Seite spotten, um den JIT-Compiler zu zwingen, ihn aufzuwärmen, können wir? :) Ich werde eine neue Antwort posten, um die Lösung, mit der ich mich endlich zufrieden gab, im Detail zu erklären. Ich werde diese Antwort jedoch als die akzeptierte bezeichnen, da sie mich in die richtige Richtung führt. Danke an Travis & Big Daddy! +1 – Alan