it-swarm.dev

Warum brauchen meine lokalen .NET-Sites nach jedem Neustart Zeit, um zum ersten Mal geladen zu werden?

Ich entwickle Websites basierend auf der .NET-Plattform. Normalerweise stelle ich diese Sites auf meinem lokalen IIS bereit, damit ich sie testen und ihre Funktionalität sehen kann, bevor ich live gehe. Bei jedem Neustart von Windows scheint es jedoch lange zu dauern, bis Websites zum ersten Mal ausgeführt werden.

Ich kenne JIT und mir ist auch diese Frage bekannt, aber es beantwortet meine Frage nicht.

Kommt JIT jedes Mal vor, wenn Sie Windows neu starten? Bezieht es sich auf die Erstellung des Prozesses w3wp.exe? Warum sind Websites für die erste Anforderung nach jedem Neustart so langsam?

27
Saeed Neamati

Dieses Problem ist die JIT-Kompilierung. Der Anwendungspool benötigt Zeit, um die Bibliotheken zu erstellen, bevor er mit der Verarbeitung beginnen kann. Dies kann mithilfe eines Aufwärmskripts beschleunigt werden, dies muss jedoch geschehen. Dies hängt auch davon ab, ob Sie eine Website oder ein Webanwendungsprojekt verwenden. Eine Website ist JIT für jede Seite, daher ist der erste Treffer langsam und jeder neue Seitentreffer hat auch eine zusätzliche Kompilierungszeit. Webanwendungsprojekte sind vorkompiliert, sollten diesen Treffer also nicht so stark erleiden, aber die Bibliotheken müssen noch geladen werden. Je mehr Bibliotheken/Tools Sie haben, desto schlimmer ist dieser Treffer. Hier sind einige Links, die das Aufwärmen diskutieren:

http://weblogs.asp.net/gunnarpeipman/archive/2010/01/22/iis-application-warm-up-module.aspxhttp: //blogs.iis. net/steveschofield/archive/2009/05/30/application-pool-warm-up.aspxhttps://stackoverflow.com/questions/2063461/iis-web-applications-warmuphttp://sharepoint.smayes.com/2011/06/application-pool-specific-warm-up-scripts/

32
Joel Etherton

Die langsame Reaktion auf Ihre erste Anfrage ist, weil IIS startet/lädt eine Site oder einen Anwendungspool nur bei der ersten eingehenden Anfrage. Und nach einer festgelegten Zeit kommen keine neuen eingehenden Anfragen auf dem Server an = IIS stoppt die Site erneut (App-Pool-Recycling).

ASP.NET 4.0 verfügt über eine neue Funktion namens Autostart. Mit dieser Funktion können Sie einen Anwendungspool oder eine einzelne Site so einstellen, dass sie sich vor allen Anforderungen selbst startet. Dies wird beim Booten ausgelöst (wenn IIS startet)) oder wenn Sie eine ASP.NET-Site aktualisieren (wodurch die Site gestoppt wird).

<applicationPools>
    <add name="MyAppPool" managedRuntimeVersion="v4.0" startMode="AlwaysRunning" />
</applicationPools>

<sites>
    <site name="MySite" id="1">
        <application path="/" serviceAutoStartEnabled="true" />
    </site>
</sites>

Sie benötigen IIS 7.5, um dies zu verwenden.

Es gibt auch eine Option, um bestimmte zusätzliche Aufgaben auszuführen, wenn der Autostart startet, z. um Daten in den Cache vorzuladen.

9
Stief

Ein Teil des Problems ist auch das GAC. Bibliotheksorte dort müssen bei jedem Laden einer Sicherheitsüberprüfung unterzogen werden. Dies bedeutet, dass eine ganze Menge verschlüsselter Arbeiten ausgeführt werden, was die Arbeit erheblich verlangsamt. Vor einiger Zeit gab es einen Vortrag über die WPF-Leistung von MS, in dem dieses Problem beschrieben wurde. Die Antwort lautete: "Legen Sie keine Daten in den GAC, wenn Sie nichts dagegen tun können."

2
gbjbaanb

IIS hat eine nervige (manchmal) Funktion für Websites mit geringem Datenverkehr. Es werden nicht verwendete Worker-Prozesse recycelt, wodurch der erste Benutzer die Site besucht. manchmal extrem lange Verzögerung (30+ Sekunden). http://dotnettimes.wordpress.com/2014/03/24/fixing-slow-initial-load-for-iis-web-site/

1
S_007