2013-02-12 7 views
6

Sono bloccato con un problema nella mia app. Ho provato fino ad ora principalmente sul mio iPad 3 con controlli occasionali sul mio iPad 1 per assicurarmi che tutto andasse bene.Differenza tra consumo di memoria virtuale e memoria reale con Memory Monitor su iOS

Sto riproducendo un'animazione UIImageView nella mia app e continua a uscire con solo un messaggio "Avviso memoria ricevuta" prima che si chiuda.

Ho utilizzato lo strumento Object Allocations negli strumenti ma, in base a ciò, l'utilizzo della memoria è molto basso. Quindi dopo aver ricercato per un po 'ho trovato questo post da Mr. Larson: https://stackoverflow.com/a/5627221/329900

Ora sto usando lo strumento Monitor di memoria. Tuttavia, non capisco perché sto smettendo. Il primo gen. iPad ha 256 MB di RAM. Ora so che non posso usare tutto questo ... alcuni dicono che non dovresti usare più di 100 MB.

Questa è la vera memoria, o memoria virtuale ... o forse una combinazione? La mia vera memoria è costantemente compresa tra 20 e 25 MB, ma il virtuale è di circa 190 - 205 MB quando si blocca.

Ecco uno screenshot: enter image description here

Chiunque in grado di far luce su questo?

+0

Suggerisco di eseguire l'applicazione con lo strumento VM Tracker abilitato. Il tracker VM mostra l'utilizzo della memoria grafica (memoria virtuale). Molto probabilmente l'animazione UIImageView sta caricando troppe immagini in memoria per eseguire l'animazione. Una tecnica di animazione più efficiente sarebbe appropriata. –

+0

Quindi, che opzioni ho per una tecnica di animazione più efficiente? Inoltre, VM Tracker mi mostra se sto caricando più immagini contemporaneamente? – daveMac

risposta

6

Nel video WWDC (Session 242) hanno trovato attraverso la ricerca di iOS App Performance: Memoria nella pagina WWDC 2012 Session Videos vi darà una migliore comprensione della differenza tra VM e memoria reale.

Ma ecco una breve panoramica: Un puntatore Intervallo = 2^32 = 4GB Questo è più grande della memoria fisica su qualsiasi dispositivo (Apple ha spedito). Questo viene fatto prendendo tutto lo spazio disponibile e dividendolo in blocchi da 4kb. Non tutta la memoria alla quale l'applicazione può accedere è nella memoria fisica allo stesso tempo. Questi blocchi 4kb sono pagine di chiamata. Le allocazioni vengono suddivise in blocchi più grandi di memoria virtuale. Quindi questi oggetti di memoria virtuale vengono mappati alla memoria fisica.

+4

+1. Questo è un video fantastico che dovrebbe essere richiesto per la visualizzazione prima di utilizzare gli strumenti di memoria. –

+0

Ho guardato il video e penso di averlo capito, ma non capisco ancora come capire se la mia app stia effettivamente caricando troppo in una volta. – daveMac

+0

Non c'è un modo più sicuro o migliore per determinare se l'app si carica troppo in una volta piuttosto che solo per assicurarsi che non si abbandoni? – daveMac