Misurare le prestazioni dell'applicazione dalla riga di comando

È possibile raccogliere le informazioni sulle prestazioni di un'applicazione usando gli strumenti da riga di comando. È possibile raccogliere dati sulle prestazioni per l'utilizzo della CPU, l'allocazione di memoria .NET, la strumentazione e le query di database.

Nell'esempio descritto in questo articolo si raccolgono informazioni sulle prestazioni di Blocco note, ma lo stesso metodo può essere usato per profilare qualsiasi processo.

Nota

Per la strumentazione C/C++ dalla riga di comando, vedere Instrumentare un componente autonomo nativo. Per i dati di utilizzo della CPU, è possibile usare le procedure descritte in questo articolo.

Prerequisiti

  • Visual Studio 2019 o versioni successive

  • Conoscenza degli strumenti da riga di comando

  • Per raccogliere informazioni sulle prestazioni in un computer remoto senza Visual Studio installato, installare il Remote Tools per Visual Studio nel computer remoto. La versione degli strumenti deve corrispondere alla versione di Visual Studio.

Raccogliere i dati sulle prestazioni

Per eseguire la profilatura tramite gli strumenti da riga di comando di diagnostica di Visual Studio è necessario associare lo strumento di profilatura insieme a uno degli agenti di raccolta a un processo. Quando si associa lo strumento di profilatura, si avvia una sessione di diagnostica che acquisisce e archivia i dati di profilatura fino a quando lo strumento non viene arrestato. I dati vengono quindi esportati in un file con estensione diagsession. È quindi possibile aprire il file in Visual Studio per analizzare i risultati.

  1. Avviare Blocco note e quindi aprire Gestione attività per ottenere gli ID processo (PID). In Gestione attività cercare il PID nella scheda Dettagli.

  2. Aprire un prompt dei comandi e passare alla directory con l'eseguibile dell'agente di raccolta, in genere qui (per Visual Studio Enterprise).

    <Visual Studio installation folder>\2022\Enterprise\Team Tools\DiagnosticsHub\Collector\

    <Visual Studio installation folder>\2019\Enterprise\Team Tools\DiagnosticsHub\Collector\

    Per gli strumenti remoti, l'eseguibile dell'agente di raccolta si trova in questo percorso:

    Program Files\Microsoft Visual Studio 17.0\Team Tools\DiagnosticsHub\Collector\

    Program Files\Microsoft Visual Studio 16.0\Team Tools\DiagnosticsHub\Collector\

    Nota

    Quando si usa la riga di comando in scenari remoti, è necessario eseguire le istruzioni della riga di comando nel computer remoto. Se si vuole connettersi al computer remoto da Visual Studio, usare invece Il profiler prestazioni in Visual Studio.

  3. Avviare VSDiagnostics.exe digitando il comando seguente.

    VSDiagnostics.exe start <id> /attach:<pid> /loadConfig:<configFile>
    

    È necessario includere gli argomenti seguenti:

    • <id> Identifica la sessione di raccolta. L'ID deve essere un numero compreso tra 1 e 255.
    • <pid, PID> del processo da profilare, in questo caso il PID trovato nel passaggio 1.
    • <configFile>, file di configurazione per l'agente di raccolta che si vuole avviare. Per altre informazioni, vedere File di configurazione degli agenti.

    Ad esempio, è possibile usare il comando seguente per l'agente CPUUsageBase sostituendo il pid come descritto in precedenza.

    VSDiagnostics.exe start 1 /attach:<pid> /loadConfig:AgentConfigs\CPUUsageLow.json
    

    In alternativa, è possibile usare il launch comando per avviare un eseguibile. In questo scenario non è necessario ottenere l'ID del processo e collegarlo. Tutti gli strumenti supportano il launch comando , anche se alcuni non supportano attach, ad esempio lo strumento di strumentazione e allocazione .NET. Ad esempio, usare quanto segue per avviare un eseguibile e raccogliere i dati di strumentazione:

    VSDiagnostics start <id> /launch:<ExeToProfile> /loadConfig:AgentConfigs\PerfInstrumentation.json
    
  4. Ridimensionare Blocco note o digitare un testo nell'applicazione per assicurarsi che vengano raccolte alcune informazioni di profilatura interessanti.

  5. Arrestare la sessione di raccolta e inviare l'output in un file digitando il comando seguente.

    VSDiagnostics.exe stop <id> /output:<path to file>
    
  6. Individuare l'output del file con estensione diagsession del comando precedente e aprirlo in Visual Studio (Apri file>) per esaminare le informazioni raccolte.

    Per analizzare i risultati, vedere la documentazione relativa allo strumento di prestazioni corrispondente. Ad esempio, potrebbe trattarsi dello strumento Utilizzo CPU, allocazione di oggetti .NET, strumentazione o strumento di database.

File di configurazione dell'agente

Gli agenti di raccolta sono componenti intercambiabili che raccolgono tipi diversi di dati a seconda degli elementi che si sta tentando di misurare.

Per praticità, è consigliabile archiviare tali informazioni in un file di configurazione dell'agente. Il file di configurazione è un file con estensione .json che contiene almeno il nome del file con estensione dll e il relativo CLSID COM. Per impostazione predefinita, è possibile trovare i file di configurazione di esempio nella cartella seguente:

Program Files\Microsoft Visual Studio\<version>\<sku>\Team Tools\DiagnosticsHub\Collector\AgentConfigs

Le configurazioni CpuUsage (Base/Alto/Basso) corrispondono ai dati raccolti per lo strumento di profilatura Utilizzo CPU. Le configurazioni DotNetObjectAlloc (Base/Low) corrispondono ai dati raccolti per lo strumento di allocazione di oggetti .NET.

Le configurazioni Base/Basso/Alto fanno riferimento alla frequenza di campionamento. Ad esempio, il valore Basso corrisponde a 100 campioni al secondo e Alto corrisponde a 4.000 campioni al secondo.

Affinché lo strumento VSDiagnostics.exe funzioni con un agente di raccolta, richiede sia una DLL che un CLSID COM per l'agente appropriato. L'agente potrebbe avere anche opzioni di configurazione aggiuntive, che sarebbero le opzioni specificate nel file di configurazione, formattate come JSON correttamente precedute da escape.

Autorizzazioni

Per profilare un'applicazione che richiede autorizzazioni elevate, è necessario eseguire la profilatura da un prompt dei comandi con privilegi elevati.