2012-01-09 18 views
10

Sto lavorando a un'app per iOS che creerà molti piccoli oggetti e oggetti fluttuanti e cercherà di farsi un'idea per quanto consumo di memoria sta consumando.Byte in tempo reale e memoria reale in Activity Monitor su iOS

Quando eseguo lo strumento "Allocazioni", dice che ho circa 2 MB di "Byte dal vivo", e la cifra rimane approssimativamente costante mentre mi muovo attraverso l'app (picchi fino a 3 MB o giù di lì quando l'app è occupata, ma poi scende di nuovo a 2 MB).

Ma quando eseguo lo strumento "Activity Monitory", la "Real Memory" della mia app è di 25 MB una volta terminato il lancio e cresce rapidamente ogni volta che si verifica il disegno all'interno del mio CALayer. In meno di un minuto, supera i 100 MB.

Perché "Byte dal vivo" mostra 2 MB, ma "Memoria reale" mostra 100 MB?

mio CALayer è il disegno tonnellate di sentieri, è pioli la CPU al 100% per alcuni secondi solo per finire una singola operazione pareggio, ed è il caricamento di tutti questi punti su un oggetto NSData in valori CGPoint, poi deallocing di nuovo (L'oggetto NSData è una versione compressa dei punti disegnati, memorizzando delta da un punto all'altro, quindi lo tengo nella RAM ma non mantengo i CGPoint reali).

Inoltre memorizza nella cache il risultato del disegno in una UIImage, e questi vengono mantenuti in un array di primo in-primo-uscita che non aumenterà fino a circa 500 KB.

risposta

11

Il mio problema è stato NSZombieEnabled.

Disattivazione in Modifica schema> Esegui> Argomenti> Variabili di ambiente risolto l'utilizzo di memoria extra.

13

Il numero di memoria reale include i blocchi di memoria che l'app ha utilizzato e già rilasciato, ma che il sistema operativo non si è preso la briga di riprendere o riutilizzare (ma potrebbe, se necessario). La memoria live è una memoria "sporca" che non può essere recuperata dal sistema operativo senza uccidere la tua app, se la tua app è in esecuzione e la memoria diventa troppo stretta.

+0

Grazie. Sai se ci sono problemi di prestazioni significativi durante la creazione di molta memoria "sporca"? Potrei creare una memoria * molto * meno sporca semplicemente consumando circa il doppio del mio attuale utilizzo di memoria, e posso facilmente ricorrere all'approccio "sporco" se ricevo un avviso di memoria insufficiente. Sto selettivamente caricando una parte di un database da 250 GB nella RAM. più ne posso contenere RAM, meglio è, ma ho bisogno di prestazioni e di memoria efficiente. –

+0

Non ho mai visto questa buona risposta per questo. È molto importante saperlo. –