ASP.NET-Web-API-Leistungsproblem

8

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?

    
Ali RAN 12.11.2013, 05:43
quelle

4 Antworten

5

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

    
Konrad Kokosa 12.11.2013 06:15
quelle
2

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.

    
Jakob Boman 12.11.2013 12:51
quelle
0

Versuchen Sie es mit Fiddler ( Ссылка ), einem kostenlosen Web-Debugging-Tool. Es hat die meisten Funktionen, die Sie suchen.

    
Manoj 12.11.2013 05:55
quelle
0

4,5 Sekunden ist ziemlich groß. Wenn Sie EF verwenden, können Sie MiniProfiler.EF

verwenden

Ich 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.

    
NicoJuicy 19.10.2015 23:20
quelle