Le caratteristiche di utilizzo della memoria di un'app sono un aspetto fondamentale delle sue prestazioni. Puoi utilizzare il System Profiler per analizzare queste caratteristiche esaminando le informazioni disponibili sui contatori delle GPU.
Dispositivi Adreno
Sui dispositivi Adreno, inizia evidenziando un periodo di tempo coerente con un singolo frame GPU, come descritto nell'articolo Stimare i tempi di elaborazione dei frame di CPU e GPU. Utilizza la tecnica descritta in quella pagina che prevede l'utilizzo della % di utilizzo della GPU o del contatore traccia di un contatore simile per i limiti della durata frame, in quanto le tracce del contatore utilizzano tutte la stessa tecnica di temporizzazione e consentono di ottenere stime più accurate dell'utilizzo della memoria (rispetto all'utilizzo dei limiti della durata frame derivati dalle sezioni della GPU i cui dati vengono raccolti indipendentemente dai dati del contatore).
![Canale di utilizzo allineato con i contatori pertinenti sottostanti](https://developer.android.google.cn/static/images/agi/memory_efficiency-images/image1.png?authuser=8&hl=it)
Totali lettura/scrittura
Dopo aver evidenziato un singolo frame nel profiler, inizia osservando i contatori Totale lettura (byte/sec) e Totale scrittura (byte/sec). Questi contatori offrono una buona visione generale della quantità di dati che attraversano il bus di memoria nel corso di un singolo frame. Fai del tuo meglio per ridurre al minimo la quantità di dati inviati sul bus, dato che la larghezza di banda della memoria è una fonte importante di consumo della batteria sui dispositivi mobili.
![Contatori totali lettura/scrittura](https://developer.android.google.cn/static/images/agi/memory_efficiency-images/image2.png?authuser=8&hl=it)
Puoi anche esaminare i contatori Vertex Memory Read (Bytes/second) e Texture Memory Read (Bytes/Second) per determinare la parte della larghezza di banda utilizzata per i dati del vertice e delle texture.
![Contatori di lettura memoria Vertex + Texture](https://developer.android.google.cn/static/images/agi/memory_efficiency-images/image3.png?authuser=8&hl=it)
Ciò che consideri "buono" per questi valori dipende dal tipo di carichi di lavoro rilevati nella tua app. Ad esempio, le applicazioni 2D potrebbero utilizzare quantità relativamente grandi (circa 2 GB/s) di larghezza di banda per la lettura della memoria delle texture in uso, ma la larghezza di banda della memoria verticale potrebbe essere molto minima (circa 50 MB/s). Per ulteriori dettagli, consulta la documentazione relativa alle sezioni Analisi della larghezza di banda della memoria del vertice e Analisi dell'utilizzo della larghezza di banda della memoria delle texture.
Blocchi del recupero
Osserva i contatori % stallo recupero Vertex, % stallo recupero texture e % stallo sulla memoria di sistema, in quanto ti daranno alcuni indizi sulle prestazioni generali della memoria della nostra applicazione. Se i valori sono superiori a circa il 5%, significa che la tua app non dispone del layout dei dati in memoria in modo efficiente o che accede ai dati in modo efficiente per sfruttare la cache. Per informazioni dettagliate su come migliorare l'utilizzo della memoria per questi tipi di asset, consulta le sezioni Analisi della larghezza di banda della memoria del vertice e Analisi dell'utilizzo della larghezza di banda della memoria delle texture.
![Contatori di blocchi di memoria](https://developer.android.google.cn/static/images/agi/memory_efficiency-images/image4.png?authuser=8&hl=it)
Dispositivi in Mali
Sui dispositivi Mali, inizia evidenziando innanzitutto un periodo di tempo coerente con un singolo frame GPU, come descritto in Stimare i tempi di elaborazione dei frame di CPU e GPU. Utilizza la tecnica descritta in quella pagina che prevede l'utilizzo della % di utilizzo della GPU o del contatore traccia di un contatore simile per i limiti della durata frame, in quanto le tracce del contatore utilizzano tutte la stessa tecnica di temporizzazione e consentono di ottenere stime più accurate dell'utilizzo della memoria (rispetto all'utilizzo dei limiti della durata frame derivati dalle sezioni della GPU i cui dati vengono raccolti indipendentemente dai dati del contatore).
![Traccia di utilizzo allineata ai contatori di tuo interesse sottostanti](https://developer.android.google.cn/static/images/agi/memory_efficiency-images/image5.png?authuser=8&hl=it)
Totali esterni output
Dopo aver evidenziato un singolo frame nel System Profiler, inizia esaminando i contatori dei byte di lettura esterni di output byte di scrittura esterna di output. Questi contatori offrono una buona visione generale della quantità di dati che attraversano il bus di memoria nel corso di un singolo frame. Fai del tuo meglio per ridurre al minimo la quantità di dati che invii sul bus, dato che la larghezza di banda della memoria è una fonte di grande consumo di batteria sui dispositivi mobili.
![Tracce contatore esterno di output](https://developer.android.google.cn/static/images/agi/memory_efficiency-images/image6.png?authuser=8&hl=it)
Totali interni dell'input
Esistono anche contatori che forniscono informazioni sulle cache stesse. I contatori che ti interessano sono "cicli di stallo interni [lettura|scrittura]". Valori più elevati indicano che stai esaurendo la cache correttamente, ma sono state effettuate troppe richieste di lettura e, di conseguenza, il codice dello Shall si blocca in attesa di accedere alla memoria.
![Traccia contatore interno di input](https://developer.android.google.cn/static/images/agi/memory_efficiency-images/image7.png?authuser=8&hl=it)
Blocchi del recupero
I contatori successivi che puoi esaminare sono quelli Vertex Prefetcher Stall Cycles e Texture Fetch Stall, in quanto forniscono alcuni suggerimenti sulle prestazioni complessive della memoria della nostra applicazione. Se noti valori superiori al 5% circa, significa che non stai distendendo i nostri dati in memoria in modo efficiente o che stai accedendo in modo efficiente per sfruttare la cache. Per maggiori dettagli su come migliorare l'utilizzo della memoria per questi tipi di asset, consulta gli articoli sull'analisi della larghezza di banda della memoria di [Vertex|Texture]
![Contatore tracce stalli di recupero](https://developer.android.google.cn/static/images/agi/memory_efficiency-images/image8.png?authuser=8&hl=it)