Come utilizzare MiniProfiler in ASP.Net Core

Le prestazioni delle applicazioni web sono una seria preoccupazione in tutto il mondo. Gli sviluppatori dispongono di molti strumenti che possono utilizzare per profilare le applicazioni Web e trovare i colli di bottiglia delle prestazioni. MiniProfiler è uno di questi strumenti, uno strumento semplice ma potente per la creazione di profili di applicazioni web. MiniProfiler ti aiuta a rilevare query in esecuzione lente, tempi di risposta del server lenti e altro ancora. 

MiniProfiler è disponibile per .Net, ASP.Net e ASP.Net Core. Troverai la documentazione per MiniProfiler su GitHub. Questo articolo presenta una discussione su MiniProfiler, sul motivo per cui è utile e su come utilizzarlo per profilare le applicazioni ASP.Net Core MVC e scoprire problemi di prestazioni nelle nostre applicazioni.

Creare un progetto ASP.Net Core MVC in Visual Studio 2017

Prima di tutto, creiamo un progetto ASP.Net Core MVC in Visual Studio. Se Visual Studio 2017 è attivo e in esecuzione nel sistema, seguire i passaggi indicati di seguito per creare un progetto ASP.Net Core MVC.

  1. Avvia l'IDE di Visual Studio 2017.
  2. Fare clic su File> Nuovo> Progetto.
  3. Selezionare "ASP.Net Core Web Application (.Net Core)" dall'elenco dei modelli visualizzati.
  4. Specifica un nome per il progetto.
  5. Fare clic su OK per salvare il progetto.
  6. Verrà visualizzata una nuova finestra, "Nuova applicazione Web .Net Core ...".
  7. Seleziona .Net Core come runtime e ASP.Net Core 2.1 (o successivo) dall'elenco a discesa in alto. Sto usando .Net Core 2.2.
  8. Selezionare "Applicazione Web (Model-View-Controller)" come modello di progetto (come mostrato nella Figura 1 di seguito).
  9. Assicurarsi che le caselle di controllo "Abilita supporto Docker" e "Configura per HTTPS" siano deselezionate. Non useremo queste funzionalità qui.
  10. Assicurati che "Nessuna autenticazione" sia selezionato. Neanche qui useremo l'autenticazione.
  11. Fare clic su OK. 

Seguendo questi passaggi verrà creato un nuovo progetto ASP.Net Core MVC in Visual Studio. Useremo questo progetto per profilare l'applicazione utilizzando MiniProfiler.

Installa e configura MiniProfiler in ASP.Net Core

Per iniziare a lavorare con MiniProfiler, è necessario installare il pacchetto NuGet necessario. Per installare MiniProfiler nel tuo progetto, segui i passaggi indicati di seguito.

  1. Seleziona il progetto nella finestra Esplora soluzioni. 
  2. Fare clic con il tasto destro e selezionare "Gestisci pacchetti NuGet ..."
  3. Cerca il pacchetto "MiniProfiler.AspNetCore.Mvc". 
  4. Fare clic su "Installa" per installare il pacchetto NuGet. 

Questo installerà il pacchetto NuGet MiniProfiler.AspNetCore.Mvc nel progetto. Per iniziare a utilizzare MiniProfiler nel tuo progetto, dovrai configurarlo nella classe Startup. Il frammento di codice seguente mostra come chiamare il metodo AddMiniProfiler sull'istanza IServiceCollection per aggiungere MiniProfiler alla pipeline.

public void ConfigureServices (servizi IServiceCollection)

        {

            services.AddMiniProfiler (opzioni =>

            options.RouteBasePath = "/ profiler"

            );

            // Codice usuale

        }

Puoi saperne di più sulle opzioni che puoi specificare durante la registrazione di MiniProfiler con la pipeline dal sito web di MiniProfiler qui.

È inoltre necessario richiamare il metodo UseMiniProfiler sull'istanza di IApplicationBuilder per iniziare a utilizzare MiniProfiler nei controller e nelle viste.

public void Configure (app IApplicationBuilder, IHostingEnvironment env)

    {

       app.UseMiniProfiler ();

       // Codice usuale

    }

Quindi aggiungi le seguenti due righe all'interno del tag nel file _Layout.cshtml.

@ utilizzando StackExchange.Profiling

@addTagHelper *, MiniProfiler.AspNetCore.Mvc

È inoltre necessario specificare dove deve essere visualizzata la finestra del MiniProfiler nella pagina Web, ovvero la posizione di rendering. Per fare ciò, puoi includere la seguente dichiarazione all'interno del tag.


  

Utilizzare i passaggi in MiniProfiler per profilare il codice ASP.Net Core MVC

MiniProfiler ti consentirà di conoscere i tempi di caricamento della pagina e le informazioni relative alle prestazioni delle query del database. Quando si esegue l'applicazione, l'output apparirà come nella Figura 2 di seguito. Notare la finestra MiniProfiler nell'angolo in alto a destra dello schermo.

Per conoscere il tempo impiegato per l'esecuzione di una parte specifica del codice, puoi sfruttare i passaggi. Il frammento di codice seguente illustra come ottenere questo risultato.

Indice IActionResult pubblico ()

 {

       var miniProfiler = MiniProfiler.Current;

       Elenco autori = nuovo Elenco ();

       miniProfiler.RenderIncludes (this.HttpContext);

       utilizzando (miniProfiler.Step ("Ottieni autori"))

       {

           autori.Add (new Author () {Id = 1, FirstName = "Joydip", LastName = "Kanjilal", Address = "Hyderabad, India"});

           autori.Add (new Author () {Id = 2, FirstName = "Stephen", LastName = "Smith", Address = "NY, USA"});

           autori.Add (new Author () {Id = 3, FirstName = "Anand", LastName = "Narayanan", Address = "Chennai, India"});

           autori.Add (new Author () {Id = 4, FirstName = "Steve", LastName = "Jones", Address = "London, UK"});

       }

           return View (autori);

 }

Il seguente frammento di codice mostra l'aspetto della suddetta classe Author.

public class Autore

    {

        public int Id {get; impostato; }

        stringa pubblica FirstName {get; impostato; }

        stringa pubblica LastName {get; impostato; }

        stringa pubblica Indirizzo {get; impostato; }

    }

Quando esegui l'applicazione, osserverai il tempo impiegato dal passaggio che abbiamo definito come mostrato nella Figura 3 di seguito. La voce che ho evidenziato in verde mostra il tempo impiegato per eseguire il passaggio "Ottieni autori".

Se desideri ignorare una parte specifica del codice della tua applicazione dalla profilazione, puoi specificare il codice da ignorare come mostrato nel frammento di codice di seguito.

utilizzando (MiniProfiler.Current.Ignore ())

{

  // Scrivi qui il codice che non vuoi

  // desidera che MiniProfiler esegua il profilo

}

Usa MiniProfiler per profilare le query ADO.Net

È inoltre possibile utilizzare MiniProfiler per profilare le query ADO.Net. Per fare ciò è necessario sfruttare ProfileDbConnection e ProfileDbCommand come mostrato nel frammento di codice di seguito.

utilizzando (SqlConnection connection = new SqlConnection (@ "Data Source = JOYDIP \ SQLEXPRESS; Initial Catalog = SyncDB; Trusted_Connection = Yes"))

     {

       using (ProfiledDbConnection profiledDbConnection = new ProfiledDbConnection (connection, MiniProfiler.Current))

         {

           if (profiledDbConnection.State! = System.Data.ConnectionState.Open)

               profiledDbConnection.Open ();

             using (SqlCommand command = new SqlCommand

              ("Seleziona * dagli autori", connessione))

               {

                 using (ProfiledDbCommand profiledDbCommand =

                   new ProfiledDbCommand (comando, connessione,

                     MiniProfiler.Current))

                       {                               

                         var data =

                          profiledDbCommand.ExecuteReader ();

              // Scrivi qui il codice per popolare l'elenco degli autori

                        }

                 }

          }                      

    }

Notare come ProfileDbConnection e ProfileDbCommand avvolgono gli oggetti DbConnection e DbCommand. Puoi saperne di più su come profilare il codice sorgente usando MiniProfiler dal sito web di MiniProfiler.

MiniProfiler è un semplice profiler per .Net, Ruby, Go e Node.js. È possibile utilizzare MiniProfiler per profilare le query generate da Dapper, Linq2SQL e Entity Framework. Oltre ad essere facile da usare, MiniProfiler non aggiunge molto overhead alle tue applicazioni. È possibile utilizzare MiniProfiler per profilare le applicazioni in produzione senza un impatto significativo sulle prestazioni.