Memory Profiler è un nuovo pacchetto per Unity 2018.3 o versioni successive che consente di analizzare l'utilizzo della memoria di un progetto per trovare perdite di memoria e frammentazione. Le perdite di memoria possono verificarsi quando la memoria viene allocata ma non viene mai deallocata per il riutilizzo dopo che la memoria non è più necessaria. In questo tutorial imparerai come utilizzare Memory Profiler per verificare la presenza di perdite di memoria.
Il profilatore di memoria
Con il memory profiler puoi analizzare l'utilizzo della memoria di un progetto per trovare perdite e frammentazione. Possono verificarsi perdite di memoria quando la memoria viene allocata ma non rilasciata dopo che non è più necessaria. Le prestazioni del programma si riducono quando la memoria si esaurisce, il che alla fine porta al crash del programma (e forse anche del dispositivo host). Quando la memoria è allocata in molti piccoli blocchi, piuttosto che in blocchi contigui più piccoli, si parla di frammentazione della memoria. Di conseguenza, le piccole aree di memoria non allocate tra i blocchi allocati non sono più disponibili per l'uso.
Installazione del profilatore di memoria
Memory Profiler funziona con Unity Editor e con build di sviluppo ed è disponibile in Package Manager come pacchetto di anteprima.
Come installare Memory Profiler:
1. Nell'editor di Unity, selezionare Package Manager dall'elenco a discesa Finestra.
2. Fare clic su Avanzate e selezionare Mostra pacchetti di anteprima.
3. Trova Memory Profiler e fai clic su Installa nell'angolo in basso a destra della finestra Package Manager.
4. Dopo l'installazione, è possibile accedere al memory profiler selezionando "Analisi"> "Memory Profiler" dall'elenco a discesa "Finestra".
Registra un'istantanea della memoria
Lo storage profiler può scegliere come target una build di sviluppo attualmente in esecuzione sul computer locale o assegnargli un indirizzo IP specifico per un computer in rete.
1. Prima di poter fare una discarica, devi selezionare una destinazione. Per impostazione predefinita, la destinazione è l'editor Unity.
2. Per selezionare un nuovo obiettivo, fare clic sul menu a discesa nell'angolo in alto a sinistra del Memory Profiler.
Fare clic sul pulsante Acquisisci per acquisire il profilo di archiviazione corrente del target selezionato. Si noti che l'acquisizione stessa occupa un po' di memoria. In alcuni casi, ciò può causare il blocco o l'arresto anomalo del target quando si esaurisce la memoria.
Importa un'istantanea della memoria acquisita
1. Fare clic sul pulsante Importa nella parte superiore della finestra Memory Profiler.
2. Utilizzare il menu a discesa Formato file nell'angolo inferiore destro della finestra di dialogo Importa file snapshot per selezionare il formato dello snapshot di archiviazione che si desidera importare. Le opzioni includono file .snap acquisiti con Memory Profiler e file .memsnap * creati con Bitbucket Memory Profiler.
3. Passa alla tua istantanea e selezionala. Fare clic sul pulsante Apri.
4. La prima volta che si acquisisce un'istantanea della memoria, verrà creata una cartella denominata MemoryCaptures (allo stesso livello della cartella Risorse, non in questa cartella). Puoi anche salvare istantanee della memoria in questa cartella per renderle accessibili.
5. Visualizza il dump della memoria
Dopo l'acquisizione o l'importazione (incluso lo spostamento dell'istantanea nella cartella MemoryCaptures), l'istantanea apparirà nella colonna di sinistra della finestra Memory Profiler. Fare clic su Apri per visualizzare il profilo di archiviazione.
La visualizzazione standard e più intuitiva è la struttura ad albero (Figura 06). Questa vista mostra la quantità di memoria utilizzata da ogni tipo di elemento in modo proporzionale. Nel nostro esempio, 126 shader occupano un totale di 80 MB di RAM.
Per visualizzare una categoria in modo più dettagliato, fare clic su di essa per visualizzare tutti gli elementi e le rispettive impronte di memoria. Informazioni più dettagliate vengono visualizzate in una tabella sotto la struttura ad albero. Fare clic sulle intestazioni per ordinare la tabella per valore o gruppo.
La vista tabella, che si trova sia sotto la struttura ad albero che sotto la struttura della memoria, contiene informazioni più dettagliate sull'utilizzo della memoria dei singoli elementi.
Una vista più diretta, la Memory Map, mostra il layout della memoria in diversi colori raffiguranti diversi tipi di memoria. Questo può essere utile per individuare la frammentazione della memoria.
Lavorare con il Memory Profiler
Trova una perdita di memoria
Come trovare una perdita di memoria:
1. Avvia il lettore, impostalo come destinazione del profilo di salvataggio e scatta un'istantanea di una scena vuota.
2. Caricare la scena che si desidera testare. Riproduci parte della scena per caricare le risorse necessarie.
3. Scaricare la scena digitando Resources.UnloadUnusedAssets () o caricando/creando due volte una scena vuota
4. Scattare un'altra istantanea ed uscire dalla modalità di riproduzione.
5. Caricare il primo e il secondo screenshot in Workbench e fare clic su Diff. Unity calcola la differenza tra i due screenshot. L'operazione potrebbe richiedere alcuni secondi a seconda delle dimensioni dell'istantanea.
6. Nella vista tabella, fare clic sull'intestazione della colonna Diff e selezionare Gruppo.
7. Le voci sono raggruppate: le stesse, in entrambi gli snapshot, dal primo snapshot eliminato e dal nuovo. Le nuove voci sono possibili perdite di memoria.
Il Memory Profiler è un ottimo modo per monitorare l'utilizzo della memoria del tuo progetto.
Non solo puoi vedere cosa sta utilizzando la maggior parte dello spazio di archiviazione, ma anche come il tuo progetto utilizza o abusa dello spazio di archiviazione. Perdite di memoria e frammentazione sono due dei problemi più comuni che interessano il progetto
e il Memory Profiler lo risolve.
Originariamente pubblicato 2020-03-16 16:46:00.