Ich habe kürzlich unsere bestehende ASP.NET MVC 2-Anwendung mit einem WebAPI-Backend auf MVC 4 umgestellt. Leider habe ich einige schwerwiegende Leistungsprobleme in Bezug auf WebAPI bemerkt.Schlechte WebAPI-Leistung
Ich habe MiniProfiler Setup und fügte einige Schritte hinzu, um zu sehen, ob ich den Engpass identifizieren konnte, und zu meiner Überraschung ist es nicht die Datenbank. Vor der Umwandlung würde eine Anforderung wie diese nicht mehr als ~ 50 ms dauern, also ist es etwas schockierend, diese einfachen Anforderungen für mehr als 2 Sekunden zu betrachten.
Der ungerade Teil ist, dass all dies ist, dass die Mehrheit der Latenz auftritt, bevor die Anforderung selbst macht es auf die SQL selbst nennt.
Ich fragte mich, ob es eine bekannte Möglichkeit gäbe, MiniProfiler tiefer in WebAPIs Aufrufe einzubinden, um genauer zu untersuchen, was hier eigentlich vor sich geht. Jede Hilfe würde sehr geschätzt werden.
FWIW, hier ist der Code für diese Anforderung
WebAPI-Controller verwendet:
[HttpGet]
public bool AssetExistsById(string assetId) {
using (Current.Profiler.Step("WebAPI Call To Model")) {
return Asset.AssetExists(assetId);
}
}
Asset-Modell:
public static bool AssetExists(string assetId) {
using (Current.Profiler.Step("WCF call to DataAccess lib")) {
return WcfEndPoint.AssetExists(assetId);
}
}
Dank!
aktualisieren
Also, was ich herausgefunden habe hier los war ... Es stellt sich heraus, dass ich System-Diagnose Tracing in meiner App_Start/WebApiConfig.cs
Datei aktiviert hatte. Ich habe die folgende Zeile zufällig auskommentiert und alles war behoben.
config.EnableSystemDiagnosticsTracing();
Ich hoffe, das hilft anderen!
Haben Sie versucht, ein VS-Profil zu nehmen, um herauszufinden, was so viel Zeit kostet? –
Haben Sie statische Seiten/Bilder in der Webanwendung, um die Ladezeiten zu testen? Es kann sich um Netzwerk/Server handeln. –
@YoussefMoussaoui Danke für die Antwort! Ich habe tatsächlich den Profiler hochgespielt, aber nichts besonders interessantes gefunden, warum meine Anfragen so lange gedauert haben ... Der längste Teil war das Routing der Anfrage, aber selbst das war relativ kurz. Vielleicht benutze ich den falschen Profiler? Ich benutze VS2012, wenn das hilft. –