Quanto spesso è appropriato distruggere oggetti?

4

So che è difficile rispondere senza esempi, quindi sto cercando principi o linee guida generali qui. Sto pensando al mondo dei giochi e delle app per dispositivi mobili di piccole e medie dimensioni.

Ho letto alcune volte che il riutilizzo degli oggetti è una pietra miliare nella creazione di programmi efficienti. Quindi, in generale, mi sforzo di riutilizzare tutto il possibile. Ma, poi, mi sono reso conto che ogni oggetto che sto tenendo in giro deve esistere da qualche parte in memoria, quindi è iniziato a sembrare inefficiente . Ho pensato che sarebbe andato bene, purché non stia cercando di rendere gli aspetti visivi o uditivi degli oggetti. E ho temuto che la costruzione e la ricostruzione di questi oggetti sarebbe troppo costosa da eseguire ogni volta che voglio solo attivare la loro presenza.

Diciamo, ad esempio, che ho una GUI composta da 30 oggetti diversi che rappresentano ciascuno uno stato dello schermo: pulsanti, riquadri, testo, uno sfondo, forse alcuni componenti dell'interfaccia utente animati. Sembra più sensato inizializzare e deinizializzare questi oggetti, tenerli in memoria, ma disabilitarne il rendering, le animazioni, ecc.? O dovrei semplicemente distruggere queste cose e ricrearle?

Altri esempi di cose che tengo intorno potrebbero essere oggetti di gioco come personaggi non giocabili, armi, oggetti, ecc.

    
posta pup 05.01.2012 - 17:40
fonte

1 risposta

9

Ottimizzazione prematura - Basta dire no!

Avere più oggetti è un'importante astrazione sull'accesso di memoria grezza che avresti lasciato se non fosse per la programmazione orientata agli oggetti.

La creazione di un oggetto è un'operazione ragionevolmente economica anche sull'hardware più modesto disponibile. Non dovresti evitarlo per impostazione predefinita.

Il caso speciale, in cui una nuova creazione di oggetti è costosa, giustifica l'uso del Pattern del pool di oggetti .

La condivisione della memoria tra oggetti simili, spesso presenti nei giochi, può essere aiutata con il modello di peso vivo .

Come semplice esempio, utilizzando un linguaggio compilato (C #, Java, C ++) su un PC moderno, puoi creare milioni di oggetti semplici in un solo secondo.

Ricorda : qualsiasi ottimizzazione dovrebbe essere eseguita solo dopo aver determinato che il tuo codice è lento e solo per le parti che sono lente .

    
risposta data 05.01.2012 - 18:07
fonte

Leggi altre domande sui tag