Migliaia di nuovi oggetti di dimensioni 0 aggiunti al mio totale netto ogni secondo, dovrei preoccuparmi?

StackOverflow https://stackoverflow.com/questions/1053400

Domanda

Ho appena finito di eliminare il mio progetto di perdite, ma ci sono ancora migliaia di oggetti nella categoria " GeneralBlock-0 " ;. Il numero di allocazioni nette è attraverso il tetto (si avvicina a un milione mentre scrivo) ma nessuna di esse è una perdita e nessuna di esse ha una dimensione maggiore di 0 byte.

AGGIORNAMENTO & amp; EDIT:

QuartzCore è responsabile di tutti gli oggetti offensivi.

I chiamanti responsabili sono (in ordine di esecuzione per iterazione del ciclo di gioco:

-[CALayer setPosition:]
x_hash_table_new_  // x2
hash_table_modify
-[CALayer setPosition:] // x9
-[CALayer(CALayerPrivate)_copyRenderLayer:flags:] //x13

Quando eseguiti su un dispositivo, gli oggetti di dimensione 48 byte sono allocati in GeneralBlock-64, 128, 256 ecc. con le stesse proprietà descritte sopra. Questo è inaccettabile poiché ovviamente provoca un significativo rallentamento. Questo è il codice nel mio progetto a cui è stato rintracciato il problema:

topRow.center = CGPointMake(topRow.center.x,topRow.center.y-PIXELS_PER_FRAME);
while (nextRow = thisTopRow.below) { //stops running when thisTopRow.below is nil
    nextRow.center = CGPointMake(nextRow.center.x,nextRow.center.y-PIXELS_PER_FRAME);       
    if (nextRow.center.y+20 < 401 && !nextRow.userInteractionEnabled)
        [nextRow enableInteraction];        
    thisTopRow = nextRow;
}

Avevo l'impressione che CGPoint fosse un tipo e che sarebbe stato deallocato alla fine del blocco di codice. Perché sta nascondendo la mia memoria? Se si tratta di esso, caricherò il file di traccia che ho salvato negli strumenti per chiunque sia interessato, ma sono abbastanza sicuro di aver coperto tutto.

È stato utile?

Soluzione

Supponendo che tu possa duplicare il comportamento sotto il Simulatore, controlla che RSIZE della tua applicazione non stia aumentando usando 'top -u' in un Terminale.

Ciò è molto probabilmente dovuto al fatto che QuartzCore ha implementato il proprio allocatore e la propria zona di allocazione, ma non si è completamente agganciato al meccanismo di raccolta delle statistiche utilizzato da Instruments.

Si prega di presentare un bug.

Altri suggerimenti

Anche lo stesso problema ... Zero byte vengono allocati nel simulatore ma nel dispositivo per ogni chiamata di metodo in CALayer sta aumentando la mia memoria con 48 byte.

Questo causa problemi di memoria.

Murali.

Sto affrontando anche questo problema. Sto usando A UIScrollView con alcune UIImageViews al suo interno, e ogni volta che cambia l'offset della vista di scorrimento c'è una chiamata a - [CALayer (CALayerPrivate) _copyRenderLayer: flags:] in fase di creazione che aumenta la memoria di 48 byte.

Ancora una volta & nbsp; & # 8211; & nbsp; sul Simulator questo è registrato come 0 byte, ma sul mio Dispositivo si sta costantemente esaurendo nella mia memoria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top