Domanda

Sono abbastanza nuovo nello sviluppo di .NET in generale. Vorrei fare alcuni strumenti sulla mia applicazione Web per ottimizzare le prestazioni, soprattutto in relazione alla memorizzazione nella cache. Ho scritto un sacco di UserControls personalizzati generati dinamicamente che mi piacerebbe provare a memorizzare nella cache in diversi modi, possibilmente con la dichiarazione della pagina ASPX o programmaticamente.

Ho anche molte query Oracle che dipendono l'una dall'altra e mi piacerebbe esaminare i risultati della memorizzazione nella cache di quelli per vedere cosa offrirà i migliori guadagni in termini di prestazioni.

Quale sarebbe il modo migliore per farlo? In qualche modo non penso che usare il cronometro per vedere quanto tempo impiega IE a caricare la pagina sia l'idea migliore. Non ho idea se la mia memorizzazione nella cache viene colpita o mancata a parte il ritardo percepito. VS2008 ha strumenti integrati per aiutare?

È stato utile?

Soluzione

Un progetto a cui ho lavorato di recente aveva bisogno di controllare i tempi delle nostre query SQL e di inviarli al listener di debug in modalità Debug. In questo modo abbiamo potuto valutare i tempi delle query SQL e il tempo impiegato per l'esecuzione, nonché eseguire il debug del nostro codice del sito Web.

L'ho fatto centralizzando le query SQL in un metodo wrapper per i 3 tipi di metodi SQL che abbiamo usato:

  • ExecuteQuery
  • ExecuteNonQuery
  • ExecuteScalar

Hanno usato la classe Stopwatch, ma c'era anche del codice per trasformare la query in un'istruzione SQL, simile a quella vista in SQL Server Profiler.

Ogni metodo era simile al seguente:

protected static object ExecuteScalar(SqlCommand comm, SqlParameter[] sqlParameters)
{
    Stopwatch st = new Stopwatch();
    bool errorDetected = false;

    try
    {
         comm.Parameters.Add(sqlParameters);

         using(comm)
         {
              st.Start();
              object returnValue = comm.ExecuteScalar();
              st.Stop();
              return returnValue;
         }
    }
    catch(Exception)
    {
         errorDetected = true;
         st.Stop();
         throw;
    }
    finally
    {
         string output = GetSqlStringForParameters(sqlParameters,st.Elapsed,QueryType.Scalar);

         if(errorDetected)
         {
              Debug.WriteLine("/*SQL (Errored)*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
         }
         else
         {
              Debug.WriteLine("/*SQL*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
         }
    } 
}

Ciò genererebbe quindi le nostre istruzioni SQL in DebugView.exe in questo modo:

/*SQL*/ exec spsGetOrder @OrderNumber='234567' -- Rows returned = 1 ;  1 params |--> completed NonQuery in 0.0016144 seconds. 

Il bello di questo è che sebbene, sì, c'è un collo di bottiglia per queste istruzioni, possiamo incollare la query direttamente nel profiler SQL e ottenere l'output della query. Significa anche che se si dispone di uno strumento per visualizzare i file di registro, è possibile utilizzare espressioni regolari per monitorare il tempo impiegato in un determinato intervallo.

Quindi, se si desidera cercare query che richiedono più di 0,5 secondi, è possibile cercare il termine:

" in 0. [5-9] \ d + " < - Tutto più grande di 0,5 secondi o " in [1-9]. \ d + " < - Tutto più grande di 1 secondo

Questo ci ha aiutato a concentrare immensamente i nostri sforzi. Ci aiuta anche a identificare se un problema è correlato al database o, come indicato sopra, un problema ASP.NET.

Infine, esiste uno strumento chiamato Fiddler che può anche aiutarti a diagnosticare le pagine quando arrivano sul tuo computer . Questo ti dà informazioni come dimensione del file, riferimenti a immagini / css, tempi di download. Questo è anche molto utile per diagnosticare problemi di dimensioni di ViewState.

Spero che questo aiuti

Altri suggerimenti

Il modo in cui di solito mi approccio è abilitando la traccia ASP.NET. C'è una buona guida per abilitare qui . È abbastanza dettagliato e, soprattutto, è gratuito.

Una cosa su cui concentrarsi è la dimensione della pagina (in particolare il suo stato di visualizzazione) che è una parte importante di quanto tempo impiega la pagina a scaricare una volta eseguito il codice. L'altro è la velocità di rendering di alcune parti del codice che è possibile ottenere effettuando chiamate a Trace.Write prima e dopo il codice perf test.

La parte del test di perf dell'utilizzo della traccia ASP.NET è in realtà solo una guida in quanto non è facilmente ripetibile, ma comunque buona. Se vuoi intensificarlo, ci sono strumenti in Visual Studio 2008 Team System che potrebbero essere migliori (anche se non li ho usati). C'è anche JetBrains dotTrace e ANTS Profiler .

AppDynamics è un ottimo monitor delle prestazioni delle applicazioni, in grado di strumentare le tue applicazioni .NET senza alcuna configurazione. Penso che potrebbe risolvere il tuo problema con quello strumento. http://www.appdynamics.com/

Ho avuto ottime esperienze con New Relic . Installazione molto semplice, dashboard estremamente chiaro sul loro sito e se ti capita di ospitare su Rackspace o Amazon Clouds di solito offrono aggiornamenti gratuiti agli account Pro. Dai un'occhiata!

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