2015-09-28 6 views
6

Sto usando XCode 7.0 con iOS 9.0 SDK & ARC, tutti i profili/test eseguiti su un iPhone 5S con iOS 9. EDIT: per tutte le schermate, è stata una corsa singola: ho eseguito una compilazione di debug direttamente da xcode e quindi gli strumenti collegati manualmente ad esso. Quindi gli screenshot provengono tutti dalla stessa singola esecuzione di test. Questa crescita della memoria (per xcode) è riproducibile al 100%.Perché l'enorme differenza tra l'uso della memoria XCode e degli strumenti, ed è ok?

La mia app scarica i file ZIP, li decomprime e li aggiunge al rullino fotografico. Mi sono assicurato di creare un profilo e di rilevare perdite di memoria (ad esempio CGContextRelease mancante) e di utilizzare @autoreleasepool ecc.

Durante la decompressione, in xcode vedo l'utilizzo della memoria riprendere velocemente, senza fine finché non viene terminata la decompressione e Non posso spiegarlo perché non ci sono oggetti in Strumenti su cui possa essere trattenuto. La memoria non viene mai rilasciata (per la visualizzazione della memoria di xcode). Alla fine della mia esecuzione di test vedo 236 MB utilizzati, senza avvisi di memoria durante la decompressione. Se utilizzo lo strumento di allocazione di Instruments, vedo 50,2 MB di heap e di anonimi VM utilizzati. Questa è un'enorme differenza!

La prima cosa che feci fu supporre che [UIImage imageNamed: è stata la colpa (caching, ecc), perché ho un bel paio di UIImageViews animati, così ho trascorso del tempo la rimozione di tutti imageNamed dal mio codice, e l'utilizzo di imageWithContentsOfFile invece. Questo non ha aiutato affatto. Aggiungo le immagini decompresse al rullino fotografico con iOS 8 Photo framework come questo: [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:[NSURL fileURLWithPath:filePath]]

Ho passato molto tempo a riversare attraverso strumenti e articoli web, ma senza risultato. Qualcuno può rispondere a queste domande?

  1. Perché la discrepanza tra l'uso della memoria xcode & Strumenti - è normale?
  2. Suppongo che questi numeri siano troppo alti per rilasciare tale app, e devo migliorarlo prima di caricare su App Store, giusto?
  3. Guardando gli screenshot qui sotto puoi dare suggerimenti dove posso iniziare a cercare il/i problema/i?

Grazie mille in anticipo per il vostro aiuto. Naturalmente vi posterò qualsiasi codice sorgente che avrebbe aiutato, solo che non sono sicuro da dove cominciare ...

XCODE utilizzo della memoria 236 MB xcode mem usage

STRUMENTI instruments vm summary

instruments allocation summary

+0

solo Strumenti fornisce numeri con cui lavorare. E Instruments è l'unico strumento da utilizzare per cercare perdite e l'utilizzo complessivo della memoria. 50 MB non sembra un problema ... – Volker

+2

davvero? quindi va bene ignorare l'enorme numero di 236 MB e far finta che non esista? Sono solo spaventato di farlo, mi sembra di spazzarlo sotto il tappeto;) – xaphod

+0

"Ho eseguito una compilazione di debug direttamente da xcode, e poi ho collegato manualmente gli strumenti ad esso" E questo è il problema. – matt

risposta

4

La causa più comune di questa è la configurazione. Di default quando esegui Xcode, costruisci in modalità Debug. Quando esegui il profilo in Strumenti, per impostazione predefinita, genera Release. Puoi modificare le configurazioni di Esegui e Profili nello schema per modificarlo.

+0

Ciao Rob, aggiornerò la mia domanda sopra: in questo caso costruisco manualmente la configurazione di debug e gli strumenti allegati – xaphod

+0

... e scusa avrei dovuto chiedere nel mio ultimo commento: intendi che gli strumenti dovrebbero essere eseguiti su build di Release? Pensavo che avrei dovuto eseguire strumenti su build di debug. – xaphod

+2

In genere si eseguono strumenti su build Release, poiché è ciò che si sta spedendo. Le ottimizzazioni possono influenzare notevolmente le prestazioni, quindi il profilo della CPU (che è un uso molto comune degli strumenti) è piuttosto inutile in Release. L'uso della memoria * di solito * non cambia in modo così drammatico. –