Xamarin Profiler

Questa guida illustra le funzionalità principali di Xamarin Profiler. Esamina i profiler, la profilatura e quando devono essere usati e un flusso di lavoro standard per la profilatura delle applicazioni Xamarin.

Il successo di un'applicazione dipende dall'esperienza utente finale. Gli sviluppatori potrebbero aver implementato alcune funzionalità davvero straordinarie nella tua app, ma se l'app è lenta o piena di arresti anomali, è probabile che l'utente lo elimini.

Storicamente, Mono ha presentato un potente profiler della riga di comando per raccogliere informazioni sui programmi in esecuzione nel runtime mono denominato Profiler di log Mono. Xamarin Profiler è un'interfaccia grafica per il profiler di log Mono e supporta la profilatura di applicazioni Android, iOS, tvOS e Mac su Mac e Android, iOS e tvOS in Windows.

Xamarin Profiler dispone di numerosi strumenti disponibili per la profilatura, ovvero allocazioni, cicli e profiler ora. Questa guida illustra le misure di questi strumenti, il modo in cui analizzano l'applicazione e chiariscono il significato dei dati presentati su ogni schermata.

Questa guida esamina gli scenari di profilatura comuni e introduce il profiler come strumento per analizzare e ottimizzare le applicazioni iOS e Android.

Scaricare e installare

Nota

È necessario essere un sottoscrittore di Visual Studio Enterprise per sbloccare questa funzionalità in Visual Studio Enterprise in Windows o Visual Studio per Mac in un Mac.

Xamarin Profiler è un'applicazione autonoma ed è integrata con Visual Studio per Mac e Visual Studio per abilitare la profilatura dall'interno dell'IDE.

Scaricare il pacchetto di installazione per la piattaforma:

Dopo il download, avviare il programma di installazione per aggiungere Xamarin Profiler al sistema.

Profiler e profilatura

La profilatura è un passaggio importante e spesso trascurato nello sviluppo di applicazioni. La profilatura è una forma di analisi dinamica del programma, che analizza il programma mentre è in esecuzione e in uso. Un profiler è uno strumento di data mining che raccoglie informazioni sulla complessità del tempo, sull'utilizzo di metodi specifici e sulla memoria allocata. Un profiler consente di eseguire il drill-through e analizzare queste metriche per individuare le aree problematiche nel codice.

Quando si progetta e si sviluppa un'applicazione, è importante non ottimizzare prematuramente; ovvero dedicare tempo allo sviluppo del codice in aree a cui si accede raramente. Questa è la potenza della profilatura. Un profiler fornisce informazioni dettagliate sulle parti più usate della codebase e consente di individuare le aree in cui è necessario dedicare tempo a apportare miglioramenti. Gli sviluppatori devono prestare attenzione a capire dove viene impiegato la maggior parte del tempo nell'applicazione e come viene usata la memoria dall'applicazione.

La profilatura è utile in tutti i tipi di sviluppo, ma è particolarmente importante nello sviluppo di dispositivi mobili. Il codice non ottimizzato è molto più evidente sulle piattaforme mobili rispetto ai computer desktop e il successo dell'app dipende da codice bello e ottimizzato che viene eseguito in modo efficiente.

Xamarin Profiler

Xamarin Profiler offre agli sviluppatori un modo per profilare le applicazioni dall'interno di Visual Studio per Mac o Visual Studio. Il profiler raccoglie e visualizza informazioni sull'app, che possono quindi essere usate dallo sviluppatore per analizzare il comportamento di un'applicazione. Esistono diversi modi per profilare un'applicazione con Xamarin Profiler, ovvero la profilatura della memoria e il campionamento statistico. Questi vengono eseguiti rispettivamente tramite gli strumenti Allocations e Time Profiler.

Attualmente, Xamarin Profiler può essere usato per testare le applicazioni Xamarin.iOS, Xamarin.Android e Xamarin.Mac in Mac (tramite Visual Studio per Mac). Il profiler è un processo separato dall'IDE e quindi, oltre all'avvio da Visual Studio per Mac, può essere usato come applicazione autonoma per esaminare .exe e .mlpd file prodotti dal profiler di log mono.

Supporto del profiler

Il supporto per Xamarin Profiler è disponibile nelle piattaforme seguenti:

  • Visual Studio per Mac (macOS, con licenza Enterprise)

    • Android
      • Dispositivo e emulatore
    • iOS
      • Dispositivo e simulatore
    • tvOS (Time Instrument non è supportato)
      • Dispositivo e simulatore
    • Mac
  • Visual Studio (solo versione Enterprise )

    • Android
      • Dispositivo e emulatore
    • iOS [Sperimentale]
      • Dispositivo e simulatore
    • tvOS
      • Dispositivo e simulatore

Si noti che è possibile profilare solo le configurazioni di debug.

Nozioni di base sul profiler

Questa sezione presenta le parti di Xamarin Profiler e ne illustra le funzionalità.

Consenti profilatura nell'app

Prima di poter eseguire correttamente la profilatura dell'app, dovrai consentire la profilatura nelle opzioni di progetto dell'app.

  • iOS:

Abilitare la profilatura per la > compilazione di debug > iOS

iOS Options Dialog in Visual Studio for Mac

  • Android:

Build > Android Debug > Enable Developer Instrumentation

Android Options Dialog in Visual Studio for Mac

Avvio del profiler

Xamarin Profiler può essere avviato dall'IDE quando si esegue la profilatura dell'applicazione iOS o Android o come applicazione autonoma.

Avvio da Visual Studio per Mac

  1. Prima di tutto, assicurarsi che l'applicazione sia caricata in Visual Studio per Mac e selezionare la configurazione di debug (predefinita).
  2. Passare a Run > Start Profilingin Visual Studio per Mac o Analyze Xamarin Profiler in Visual Studio (Analizza > profiler Xamarin in Visual Studio) per aprire il profiler, come illustrato nel diagramma seguente:

Launching the Profiler from Visual Studio for Mac

Se le voci di menu non vengono visualizzate, vedere la guida alla risoluzione dei problemi.

Verrà avviato il profiler e verrà avviata automaticamente la profilatura dell'applicazione.

Il profiler può essere usato per misurare la memoria e le prestazioni. Questo risultato viene ottenuto tramite gli strumenti Allocations and Time Profiler, che verranno esaminati in dettaglio nella sezione successiva.

Salvataggio e caricamento delle sessioni del profiler

Per salvare una sessione di profilatura in qualsiasi momento, scegliere Salva > con nome file dalla barra dei menu del profiler. In questo modo il file viene salvato in formato mlpd , un formato speciale e altamente compresso per i dati di profilatura.

Dopo l'installazione di Xamarin Profiler, vedere la cartella Applicazioni, come illustrato nello screenshot seguente:

Open standalone Profiler from Mac

È possibile caricare i file con estensione mlpd nel profiler aprendo l'applicazione autonoma, selezionando Scegli destinazione e caricando il file.

Per altre informazioni, vedere Generazione di file con estensione mlpd.

Funzionalità del profiler

Xamarin Profiler è composto da cinque sezioni, come illustrato di seguito:

  • Barra degli strumenti : nella parte superiore del profiler, offre opzioni per avviare/arrestare la profilatura, selezionare un processo di destinazione, visualizzare l'ora di esecuzione dell'app e selezionare le visualizzazioni suddivise che compongono l'applicazione profiler.
  • Elenco degli strumenti: elenca tutti gli strumenti caricati per la sessione di profilatura.
  • Grafico tracciato : questi grafici sono correlati orizzontalmente agli strumenti pertinenti nell'elenco degli strumenti. È possibile usare un dispositivo di scorrimento (visualizzato sotto Time Profiler) per modificare la scala.
  • Area Dettagli strumento: contiene i dati visualizzati dalla visualizzazione selezionata dello strumento corrente. Queste visualizzazioni verranno esaminate in modo più dettagliato nella sezione seguente.
  • Vista controllo: contiene sezioni che possono essere selezionate dal controllo segmentato. Le sezioni dipendono dallo strumento selezionato e includono: Configurazione Impostazioni, Statistiche, Informazioni di analisi dello stack e Percorso alle radici.

Allocazioni

Lo strumento allocazioni fornisce informazioni dettagliate sugli oggetti nell'applicazione durante la creazione e il Garbage Collection.

Nella parte superiore del profiler è presente il grafico delle allocazioni, che visualizza la quantità di memoria allocata a intervalli regolari durante la profilatura. Attualmente il grafico delle allocazioni è il numero totale di allocazioni e NON la dimensione dell'heap in quel momento. In un certo senso, non andrà mai giù, aumenterà solo. Sono inclusi gli oggetti allocati nello stack. A seconda della versione di runtime usata, il grafico può avere un aspetto diverso, anche per la stessa app.

Esistono visualizzazioni dati diverse nello strumento Allocazioni, che consentono agli sviluppatori di analizzare il modo in cui l'applicazione usa e libera la memoria. Queste visualizzazioni sono descritte di seguito:

  • Allocazioni: visualizza un elenco di tutte le allocazioni e le raggruppa in base al nome della classe. In questo modo viene fornita una panoramica generale delle classi e dei metodi usati, della frequenza con cui vengono usate e delle dimensioni collettive delle classi usate. Facendo doppio clic su una classe verrà visualizzata la memoria allocata:

La visualizzazione Inspector for Allocations (Controllo allocazioni) offre opzioni per filtrare e raggruppare oggetti, fornire statistiche sulla memoria allocata e le allocazioni principali, nonché le visualizzazioni per l'analisi dello stack e il percorso alla radice.

  • Albero delle chiamate: visualizza l'intero albero delle chiamate di tutti i thread nell'applicazione e include informazioni sulla memoria allocata in ogni nodo. Quando un elemento viene selezionato nell'elenco, tutti i nodi di pari livello verranno visualizzati in grigio. È possibile espandere l'albero o fare doppio clic sull'elemento per eseguire il drill-down. Quando si visualizza questa visualizzazione dati, è possibile usare la visualizzazione controllo impostazioni di visualizzazione per modificare la modalità di presentazione. Attualmente sono disponibili due opzioni:
    1. Albero delle chiamate invertito: considera l'analisi dello stack dall'alto verso il basso. Si tratta di un'opzione di visualizzazione pratica che indica i metodi più profondi in cui la CPU ha trascorso il tempo.
    2. Separato dal thread : questa opzione organizza l'albero delle chiamate in base al thread.
  • Snapshot: questo riquadro visualizza informazioni sugli snapshot di memoria. Per generarli durante la profilatura di un'applicazione dinamica, fare clic sul pulsante Fotocamera sulla barra degli strumenti in ogni punto in cui si vuole visualizzare la memoria mantenuta e rilasciata. È quindi possibile fare clic su ogni snapshot per esplorare ciò che accade sotto le quinte. Si noti che gli snapshot possono essere creati solo durante la profilatura dinamica di un'app.

Profiler ora

Lo strumento Time Profiler misura esattamente il tempo impiegato in ogni metodo di un'applicazione. L'applicazione viene sospesa a intervalli regolari e viene eseguita un'analisi dello stack in ogni thread attivo. Ogni riga nell'area Dettaglio strumento mostra il percorso di esecuzione seguito.

Il grafico del tracciato, come illustrato nello screenshot seguente, visualizza il numero di campioni ricevuti dall'app durante l'esecuzione:

  • Albero delle chiamate: mostra la quantità di tempo impiegato in ogni metodo:

Cicli

Tramite l'uso di codice gestito C# e F#, può essere piuttosto comune e purtroppo abbastanza facile creare riferimenti a oggetti che non verranno mai eliminati. Questo strumento consente di individuare tali oggetti e visualizzare i cicli a cui si fa riferimento nell'applicazione.

Applicazioni di profilatura

Attualmente è possibile profilare solo le configurazioni di debug predefinite.

Se si profila un'app con qualsiasi altra configurazione, verrà visualizzata la finestra di dialogo di messaggio seguente:

Selezionare Aggiorna per continuare.

SGen Garbage Collector e profilatura

Il Garbage Collector di SGen viene usato per tutte le piattaforme Xamarin.

SGen è un GC generazionale, che alloca gli oggetti di un'applicazione in tre heap: vivaio, heap principale e grande spazio oggetti. Ciò consente un'esecuzione più rapida di Garbage Collection. SGen è attualmente l'GC predefinito per Xamarin.Android e le applicazioni unificate Xamarin.iOS.

Applicazione Xamarin.iOS che usa l'API classica usava boehm GC, un Garbage Collector conservativo e non generazionale. Poiché è conservativo, è meno probabile liberare memoria disponibile, che può portare a risultati imprecisi quando si usa il profiler. Per questo motivo, lo strumento Allocazioni non può essere usato con il Garbage Collector boehm.

Anche se viene visualizzata una finestra di dialogo di messaggio se l'app usa boehm GC, Xamarin non consiglia di passare all'applicazione iOS esistente che usa Boehm a SGen senza un'attenta ricerca e un test accurato. Xamarin non consiglia inoltre di passare a SGen per la profilatura e quindi tornare indietro, perché questi risultati non forniranno benchmark accurati dell'utilizzo della memoria.

Per altre informazioni sulla gestione della memoria, vedere la Guida alle procedure consigliate per la memoria e le prestazioni .

Riepilogo

In questa guida è stata esaminata la profilatura e come è vantaggiosa per lo sviluppatore. È stato quindi introdotto Xamarin Profiler, fornendo alcune informazioni sulla cronologia e sul relativo funzionamento. Infine sono state esaminate le funzionalità di Xamarin Profiler ed è stato esaminato allocazioni e strumenti del profiler temporale.