2015-02-04 7 views
8

Sto tentando di scaricare un numero elevato di immagini utilizzando AFNetworking 2.5 e lo streaming su disco. Secondo il monitor di memoria in Xcode, questo sta causando una crescita della memoria illimitata (e, infine, gli avvisi di memoria e l'interruzione forzata), ma la profilazione dell'utilizzo della memoria utilizzando lo strumento di allocazione mostra che l'utilizzo della memoria è stabile.L'utilizzo della memoria iOS è in aumento, non è possibile trovare il colpevole

Mi piacerebbe pensare che Xcode sia semplicemente sbagliato qui, ma perché la mia app verrà uccisa da iOS?

Instruments mostra questo - i picchi sono interrogazioni Core Data, poi il resto è le immagini scaricando - picchi a circa 9.5MB, il resto si trova a circa 8.5MB

Instruments

Ho anche provato Analisi Heapshot - che mostra un po 'di crescita, ma in nessun posto vicino l'ammontare riportato da Xcode

Heapshot Analysis

memoria monitor di Xcode mostra questa - in crescita da parte di più MB al Itera zione.

Xcode Memory Usage

C'è un modo per ottenere Strumenti per mostrarmi ciò che Xcode sta vedendo? O c'è uno strumento migliore da usare per scoprire dove sta andando tutta questa memoria?

Grazie!

+1

Quando si esegue l'app tramite profiler, credo che sia impostato su una build di rilascio. Mi chiedo se quando lo stai eseguendo tramite Xcode, se stai costruendo una versione di debug. Controlla i tuoi schemi e assicurati che i due costruiscano la stessa versione. – Rob

+0

Sia "Esegui" che "Profilo" sono impostati per eseguire il debug nell'editor di schemi. A meno che non ci sia un altro posto che potrebbe essere impostato? – NathanGaskin

+0

No, è esattamente dove stavo pensando. È piuttosto comune vedere la build di rilascio per il profilo (e vedere un comportamento diverso rispetto alle build di debug come risultato). E, naturalmente, presumo che in Strumenti, sotto l'impostazione "Tipi registrati" dello Strumento di allocazione nella scheda "Opzioni di registrazione", tu stia registrando tutti i tipi? Molto, molto curioso. Un heisenbug. – Rob

risposta

13

Secondo la memoria monitor in Xcode, questo sta causando crescita illimitata memoria (ed eventualmente avvisi di memoria ed esce forza) - ma profiling l'utilizzo della memoria utilizzando lo strumento assegnazioni mostra l'utilizzo della memoria sia stabile.

Credete strumenti e le allocazioni informazioni - monitor non la memoria in Xcode. Il grafico del monitor di memoria è completamente irrilevante. Ignoralo.

Questo non è perché il monitor di memoria in Xcode è inutile o sbagliato. È perché la gestione della memoria è completamente diversa per una build di debug rispetto a una build di rilascio (Instruments utilizza una build di rilascio). Questo è particolarmente vero in Swift (non dici se stai usando Swift).

Osservare l'utilizzo della memoria solo sul dispositivo e solo in una build di rilascio. Altrimenti, sarai completamente ingannato.

+0

Questo sembra decisamente il caso. Abbiamo lasciato l'app eseguendo alcune migliaia di iterazioni del codice incriminato in una versione di rilascio senza problemi. Sembra comunque strano che l'impostazione dello schema del profilo su "debug" comporti una versione di rilascio che viene comunque profilata. – NathanGaskin

Problemi correlati