Tempistica globale delle pagine ASP.Net
-
19-08-2019 - |
Domanda
Ho appena ereditato un sito Web (ASP.Net 2.0) scritto da qualcun altro che devo mantenere.
Il codice non è orribile, ma ha una serie di cose che rendono il sito web incredibilmente lento.
Ho un'idea per monitorare questo, e voglio vedere cosa ne pensano gli sviluppatori più esperti.
Il mio obiettivo in questo momento è scoprire quando le pagine impiegano troppo tempo a caricarsi, per focalizzare l'attenzione in quei punti.
Sto pensando di collegare gli eventi PreRequestHandlerExecute e PostRequestHandlerExecute in Global.asax, creare uno StopWatch in " Pre " allegarlo a HttpContext.Items e leggerlo in " Post " e se la richiesta ha ricevuto più di, diciamo, 100ms, mi riferirà di farmelo sapere.
Alcuni "pseudo codici" per quello sarebbe:
protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e) {
System.Diagnostics.Stopwatch theTimer = new Stopwatch();
theTimer.Start();
HttpContext.Current.Items.Add("RequestTimer", theTimer);
}
protected void Application_PostRequestHandlerExecute(Object sender, EventArgs e) {
Stopwatch theTimer = (Stopwatch) HttpContext.Current.Items["RequestTimer"];
System.Diagnostics.Debug.WriteLine(theTimer.ElapsedMilliseconds + "@: " + HttpContext.Current.Request.RawUrl)
}
Cosa ne pensi di questo approccio?
È ragionevole farlo?
Farà in ginocchio il mio sito Web?
C'è un modo migliore per farlo?
Alcuni pensieri:
- Potrebbe essere meglio prendere DateTime.Now. Scegli e memorizzalo, che probabilmente sarà più leggero dello StopWatch
- So che sarebbe meglio avere tutte le pagine ereditate da una mia pagina e tempo lì, ma non voglio passare attraverso dozzine di pagine e cambiarle tutte.
Ogni pensiero è molto apprezzato! Grazie!
Soluzione
Invece di scherzare con un cronometro, getterei l'ora di inizio nella raccolta HttpContext e la tirerei indietro. Quindi è possibile eseguire una semplice sottrazione al termine della richiesta che dovrebbe avere un impatto trascurabile sulle prestazioni.
Altri suggerimenti
L'approccio migliore sarebbe quello di abilitare traccia .
Non lo farei. Sarà più un problema di quanto valga la pena. Esistono alcuni buoni strumenti di profilazione per ASP.NET come CLR Profiler e ANTS Profiler di Red Gate.
Come osservato da BobbyShaftoe, la profilazione è la soluzione migliore. Ma considera anche dotTrace di JetBrains; è molto, molto bene.