Ich habe eine einfache Web-API, die die Liste der Kontakte zurückgibt:
%Vor% Da ich Stopwatch
zum Testen der Datenwiederherstellung verwendet habe, ist es offensichtlich, dass es weniger als eine Sekunde dauert. Wenn ich jedoch über den Chrome-Browser eine Anfrage an die Aktion GetContacts
absetze, dauert es 4 bis 5 Sekunden, um Daten zurückzugeben.
Offensichtlich hat diese Verzögerung nichts mit meinem Datenabrufcode zu tun. Es scheint mir, dass Web-API langsam läuft. Aber ich habe keine Ahnung, wie man das debuggt und verfolgt.
Gibt es ein Dienstprogramm zum Protokollieren der Zeitsteuerung für die HTTP-Anforderungsprozess-Pipeline von ASP.NET? Ich meine, etwas wie Navigation Timing , um jedes Ereignis anzuzeigen ist in welcher Zeit aufgetreten?
Wie groß ist Ihre Antwort? Vielleicht sind es Kosten für Serialisierung und Übertragung? Es gibt jedoch viele Möglichkeiten, es zu profilieren. Ich würde damit beginnen, mit einem der Tools auf dem Markt zu arbeiten, wie zum Beispiel ANTS Performance Profiler oder dotTrace
Laufen Sie es mit dem Debugger? Führen Sie einige Tests ohne den Debugger durch. Ich hatte ähnliche Probleme mit einem Web-API-Projekt, das ich gerade entwickle und für uns Wenn Sie den Debugger ausschalten, dauert der Test Millisekunden statt Sekunden.
Es scheint auch einige Anlaufkosten beim ersten Aufruf einer API zu geben, nachfolgende Anfragen sind immer schneller.
4,5 Sekunden ist ziemlich groß. Wenn Sie EF verwenden, können Sie MiniProfiler.EF
verwendenIch habe eine Verlangsamung (in der Vergangenheit) erlebt, indem ich Entity Framework Queryable falsch verwendet habe (in Listen konvertiert, erweitert, ...).
Wenn Sie EF verwenden, halten Sie es IQueryable so lange wie möglich (.ToList () führt eine Abfrage aus).
Verwenden Sie nach Ihren Bedürfnissen Debugging-Tools wie MiniProfiler, MiniProfiler.Ef und andere Tools sind wahrscheinlich auch gut (obwohl ich sie in der Vergangenheit nicht verwendet habe).
Die Kosten der Serialisierung können wichtig sein (wenn Sie DTOs verwenden), scheint AutoMapper (und wahrscheinlich andere Tools) in großen Listen langsam zu sein. Ich würde vorschlagen, sie manuell in einer Erweiterungsmethode zuzuordnen, wenn Sie wirklich Leistung auf großen Listen wollen.
Tags und Links asp.net-web-api c# asp.net performance asp.net-mvc-4