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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top