Das ASP.NET-Webanwendungsprojekt, an dem ich gerade arbeite, wird im Laufe der Zeit langsamer, um es neu zu laden (in IIS oder dem .NET-Entwicklungsserver). Derzeit dauert es:
Die Maschine ist ziemlich schnell - Ein Core 2 Quad 2.40 GHz, 8 Giga RAM, läuft die Dev-Maschine unter HyperV mit 2 Gigabyte RAM für die dev VM zugeordnet.
Gibt es eine Möglichkeit, den gesamten Zyklus dieser Anfangslast zu verfolgen / zu melden? Wenn ich sehen könnte, wie lange der grundlegende IIS-Arbeitsprozess benötigt, um DLLs zu laden, starte den eigentlichen .NET-Code, das wäre großartig.
Ich weiß, dass ich einen Profiler für den Code verwenden kann, der keine ultra-langsamen DB-Verbindungsaufbauzeiten aufzeigt, aber ich möchte gerne einen Einblick in die Leistung des Materials bekommen, bevor die eigentliche Seite verarbeitet wird . Ich kann sehen, dass der CPU-Monitor während des Prozesses ein wenig zu 100% getroffen wird, die RAM-Nutzung springt ein wenig - aber ich suche nach besseren Erkenntnissen, um die Dinge hoffentlich etwas zu trimmen.
Obwohl ich zu Beginn des Projekts (vor vier Monaten) keine Messungen vorgenommen habe, bin ich mir absolut sicher, dass das Nachladen ein relativ leichter Vorgang war.
Jede Hilfe sehr geschätzt, Programmierer-wer-kann-nur-so-viel-Kaffee-während-einem-bauen-trinken-tritt auf.
JetBrains dotTrace war ausgezeichnet (für diesen Fall), danke. Es hatte die perfekte Schnittstelle, um ein Webprojekt zu starten, und stellte schnell fest, dass die meiste Zeit in Application_Start () (in Global.asax ) verbracht wurde.
>Die anderen Optionen hätten das nicht aufgegriffen, wie:
Die Option Ablaufverfolgung beginnt erst ab PreInit, fehlende Application_Start () -Aufruf.
Die StopWatch Aufrufe hätten Ich musste wissen, wo ich hinschauen sollte, oder zu den guten alten Zeiten zurückkehren printf-style debuggen ...
nprof möchte auf eine .exe-Datei verweisen, die würde den Zielbereich vermissen, wenn versucht wird, an neue w3wp.exe-Instanzen anzuhängen ...
Ein Profiler wie JetBrains dotTrace sollte Ihnen sagen, wo Ihr Engpass liegt ... Wenn Sie nichts Außergewöhnliches sehen (dh lange Prozesszeiten bei einer Methode), dann ist es nicht Ihre Anwendung. Es muss die Umwelt sein. Es könnte sein, wenn Sie Active Directory verwenden und der Anruf an Active Directory hängen bleibt ... Gibt es einen Web-Service-Anruf? Verwenden Sie Team Systems? Gibt es Postbuild-Prozesse?
Für mich klingt es so, als ob etwas ausgeht. Deshalb wartest du so lange.
In der Vergangenheit habe ich den ANTS-Performance-Profiler von redgate verwendet. Es ist wirklich gut und es hat für mich sehr gut funktioniert. Ich weiß, dass nicht jeder Geld in diese Art von Werkzeugen ausgeben möchte, aber das könnte sich lohnen. Probieren Sie es aus, sie haben eine kostenlose 14-Tage-Testversion, die Sie auf dieser Website verwenden können und genau herausfinden, was das Problem ist.
Viel Glück!
Haben Sie die einfache Technik versucht, die Seitenverfolgung einzuschalten, um zu sehen, ob sie Ihnen etwas sagt? Die erste Zeile in Ihrer Aspx-Seite sieht folgendermaßen aus:
%Vor%Wenn die Seite im Browser gerendert wird, wird eine ganze Reihe von Informationen an die Unterseite angehängt.
Profiling und Tracing sind beide gute Empfehlungen.
Wenn Sie mit dem DateTime.Now.ToString () - Vorschlag fortfahren, würde ich stattdessen die System.Diagnostics.StopWatch-Klasse empfehlen. Es ist sehr einfach zu benutzen, und ich finde es genauer.
%Vor%Tags und Links asp.net performance w3wp load-time