2016-04-13 10 views
0

Ich habe eine ASP.NET-Website mit einer Testseite, die einige dynamische Seiten abruft. In der Regel Zeit für alle Abhängigkeiten Laden ist sehr schnell: enter image description hereZufällige Verzögerung für dynamischen Inhalt in IIS

Aber manchmal eine oder mehr Seiten Lasten viel langsamer als gewöhnlich: enter image description here Diese Verlangsamung geschieht für eine zufällige Seite und zufällig in der Zeit. Nach dem erneuten Laden der Testseite ist alles wieder normal.

Ich verwende kein dynamisches Inhalts-Caching explizit, aber es scheint, als würden normalerweise Ressourcen zwischengespeichert, aber etwas geht selten schief.

Außerdem legte ich eine StopWatch, um die Ausführungszeit von dynamischen Seiten zu bestimmen. Das erste Mal nach dem Zurücksetzen von web.config werden alle Seiten in 20-50 ms ausgeführt und jedes Mal danach (selbst wenn dieses Problem mit langsamem Seitenladen auftritt) dauert es nur 1 ms, also ein Problem ist auf der Seite von IIS . Was soll ich als nächstes prüfen?

Spezifikationen: .NET 4.5, Windows Server 2012 R2, IIS 8.5.

Vielen Dank im Voraus!

UPD: Danke für Ihre schnellen Antworten. Die Hauptversion für diesen Rückstand ist das Recycling von Anwendungspools. Ich muss erwähnen, dass die Verzögerung für jede zweite-dritte Seite neu geladen wird (wenn ich wiederholt auf F5 klicke). Ich bin mir fast sicher, dass das Recycling nicht so oft auf dem Server passiert.

+0

Was Sie suchen, heißt "Aufwärmen". Das ist als ein Modul in IIS 7.5 verfügbar. In früheren Versionen müssen Sie ein Warmup-Skript ausführen, wenn Sie Ihre Anwendung z. B. nach einer Bereitstellung starten. Dies kann etwas so einfaches sein wie das Aufrufen der Startseite oder das Treffen einiger Seiten, um sicherzustellen, dass die Lookup-Caches aufgefüllt werden. –

Antwort

0

Dies kann aufgrund der IIS-Behandlung von AppDomains sein. Der IIS hostet Apps in AppDomains und innerhalb dieser AppDomains funktioniert der JIT-Compiler wie bei jeder anderen .NET-Anwendung. Das bedeutet, dass beim ersten Mal, wenn eine Seite/ein Controller verwendet wird, der JIT den Code kompiliert und das braucht Zeit. Im Gegensatz zu einer lokalen .NET-Anwendung recycelt der IIS jedoch gelegentlich die ApplicationPools, die die AppDomain enthalten, um Bugs (und freie Ressourcen) zu verhindern. Wenn Sie die Seite erneut laden, muss Ihre App neu kompiliert werden.

+0

IIS * rezykliert * einen * Anwendungspool * als Vorsichtsmaßnahme gegen Fehler, * nicht * um Ressourcen zu sparen. –

+0

Hängt davon ab, ob ein Speicherverlust ein Fehler ist. : P Trotzdem habe ich meine Antwort aktualisiert. Besser? – Toxantron

+0

Gibt es IIS-Einstellungen, mit denen Sie feststellen können, dass es sich wirklich um ein Recycling handelt? Stellen Sie beispielsweise ein großes Timeout ein und stellen Sie sicher, dass dieses Problem nicht erneut auftritt. –

Verwandte Themen