Strumenti ObjectAlloc: spiegazione dei byte attivi e dei byte complessivi


86

Sto usando lo strumento ObjectAlloc di Instument nel tentativo di capire cosa sta facendo la memoria della mia applicazione (iPhone) e quando e dove lo sta facendo.

Vorrei davvero una spiegazione di base di queste statistiche:

  • Byte in tempo reale
  • #Vita
  • #Transitorio
  • Byte complessivi

Quando cerco di calcolare la quantità di memoria utilizzata dalla mia applicazione, devo guardare Byte in tempo reale o Byte complessivi? Questo include la perdita di memoria? Cosa sono gli oggetti transitori?

Grazie


6
le colonne hanno brevi descrizioni quando passi il mouse sulle loro intestazioni.
Piotr Byzia

Risposte:


110

ObjectAlloc tiene traccia di tutta l'allocazione e la deallocazione della memoria nel tempo in cui il programma è in esecuzione.

Il Living bytes, or Net bytesè la quantità di memoria l'applicazione utilizza al momento selezionata nella timeline. Ciò includerà la memoria persa, poiché la memoria persa non viene mai deallocata.

#Livingè il numero di allocazioni di una certa dimensione / tipo di oggetto avvenute (e ancora allocate). Questo è molto utile quando si cercano perdite.

Ad esempio, se esegui ripetutamente un'azione (come entrare e uscire da un controller di visualizzazione modale) e vedi che #Livingdi un oggetto cresce della stessa quantità ogni volta, allora probabilmente stai perdendo quegli oggetti. È quindi possibile confermare il drill-down e visualizzare la riga di codice esatta che sta allocando gli oggetti e persino vedere l'indice temporale che ciascuno di essi è stato creato.

Overall bytesinclude la memoria che è stata rilasciata. È utile tenere traccia di quel numero per scopi di ottimizzazione delle prestazioni, ma non se stai solo cercando di vedere la tua impronta di memoria corrente o cercare perdite.


3
Cosa cercheresti di ottimizzare in termini di byte complessivi? Cercare di mantenere un numero basso significa prestazioni migliori?
Dan Rosenstark

4
Si corretto. Una causa comune di problemi di prestazioni è l'esecuzione accidentale dello stesso codice più di una volta. Lo strumento Allocazioni può essere un buon modo per notarlo. Ad esempio, anche se gli oggetti extra non vengono fuoriusciti, potresti dire: "Perché ho creato 3 di quell'oggetto? Avrebbe dovuto essercene solo uno!"
Ken Aspeslagh

2
Byte attivi indica la quantità di memoria attualmente utilizzata dalla tua app. Il Complessivo è solo il totale di tutte le allocazioni effettuate dalla tua app (inclusa la memoria che da allora è stata liberata).
Ken Aspeslagh,

1
@KenAspeslagh perché dovrei preoccuparmi dei byte complessivi, se contiene anche oggetti rilasciati?
Dejell

3
Se stai ottimizzando le prestazioni, allora vuoi ridurre al minimo il numero di allocazioni che la tua app effettua durante l'esecuzione (anche se non stai perdendo dette allocazioni.) Le allocazioni eccessive possono spesso essere un indicatore che stai sbagliando.
Ken Aspeslagh

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.