> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/powershell-universal/it/sviluppo/profiling.md).

# Profilazione

{% hint style="info" %}
La profilazione funziona solo per l'ambiente integrato.
{% endhint %}

PowerShell Universal fornisce un profiler delle prestazioni per il debug di problemi in cui la piattaforma potrebbe presentare risposte lente. Ciò è utile principalmente durante la creazione di Dashboard.

## Abilitare la profilazione

La profilazione aumenterà l'utilizzo della memoria poiché i dati di profilazione vengono archiviati in memoria. È possibile abilitare la profilazione configurando la proprietà `Profiling` di appsettings.json. Per impostazione predefinita è `false`. Sarà necessario riavviare PowerShell Universal dopo aver abilitato o disabilitato la profilazione.

```json
"Profiling": true
```

## Accedere ai dati di profilazione

È possibile accedere ai dati di profilazione navigando a `/profiler/results-index` . Sarà necessario aver effettuato l'accesso come amministratore prima di poter accedere a questo URL.

Verrà visualizzato un elenco di richieste e delle relative tempistiche.

![Result Index](/files/GsAwR7HDdnsr6xVqKza3)

Facendo clic sulla richiesta verrà visualizzata una suddivisione delle tempistiche.

![Timings](/files/pHU7g4bC3D04GFDnalvs)

## Profilazione di un endpoint API

È possibile profilare un endpoint API utilizzando `Measure-PSUBlock`. L'API sarà elencata per URL nell'indice dei risultati.

Ad esempio, si supponga un'API chiamata `/process`.

```powershell
New-PSUEndpoint -Url "/process" -Endpoint {
    Measure-PSUBlock -Name 'Api' -ScriptBlock {
        Get-Process | Select-Object name
    }
} -Authentication -Timeout 0 
```

Il risultato della profilazione di questa API sarebbe elencato per URL.

![](/files/PM5tSLaY0L743MGyUTP9)

La visualizzazione del profilo per questa API elencherebbe il blocco che abbiamo misurato.

![](/files/DiaVibSFCzlf3bV93Msq)

## Profilazione di un'app

{% hint style="info" %}
`Measure-UDBlock` è un alias per `Measure-PSUBlock`
{% endhint %}

È possibile utilizzare il profiler integrato con le App. Per impostazione predefinita, vengono registrate determinate tempistiche di azioni interne. È inoltre possibile utilizzare il cmdlet `Measure-PSUBlock` per misurare blocchi specifici all'interno della dashboard.

Ad esempio, questa app utilizza `Measure-PSUBlock` per misurare le prestazioni del cmdlet `Start-Sleep`. Il risultato è che il blocco impiegherà un secondo per essere eseguito.

```powershell
New-UDApp -Title 'App' -Content {
    New-UDDynamic -Id 'MyElement' -Content {
        Measure-PSUBlock -Name 'WithinDashboard' -ScriptBlock {
            Start-Sleep 1
        }
    }
}
```

Quando si esaminano le richieste all'interno del profiler, si dovranno cercare `UDComponent\ElementPost` e `UDComponent\Element`. Queste sono richieste di elementi all'interno delle App.

Di seguito è riportato l'output di esempio dell'app mostrata sopra. Si noti che l'URL include l'ID dell'elemento `MyElement`. Si noterà inoltre che il blocco `WithinDashboard` impiega circa 1 secondo.

![Dashboard Timing](/files/fN3bUQorFEi0P5dzQ7Og)

Non tutte le tempistiche vengono visualizzate per impostazione predefinita. È possibile fare clic su `show trivial` per espandere tutte le tempistiche.

![All Timings](/files/UEKZX5O6j7Scubr0O1o8)

## Profilazione di un processo

È possibile profilare i processi utilizzando `Measure-PSUBlock` all'interno dello script.

Ad esempio, si supponga di avere uno script che chiama `Get-Service`.

```powershell
Measure-PSUBlock -ScriptBlock {
    Get-Service
} -Name 'Get-Service'
```

L'esecuzione di un profilo su questo script elencherà il processo come `JobProfiler/{id}`. L'id corrisponderà all'ID del processo mostrato nella console di amministrazione.

![](/files/5u1txZYDONMnbWHkBjBj)

Il profilo includerà il blocco che è stato misurato.

![](/files/JAsbxmBMcjmTdFhukRKc)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.devolutions.net/powershell-universal/it/sviluppo/profiling.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
