Qual è il modo migliore per costruire in modo efficiente un'app per iOS con migliaia di file di risorse di piccole dimensioni?

3

Ho un'app per iOS che attualmente ha oltre 2500 immagini. Questi sono generati in un catalogo di risorse per utilizzare il diradamento (varianti di 2500 x 5 = molti file). I file sono in gran parte accessibili a caso.

I batch di file verranno scaricati tramite acquisto in-app. Alla fine, finirò con le immagini 10K, quindi probabilmente i file 50K.

È questo il modo migliore per archiviare questi file?

Sotto Windows, potrei suddividerli in DLL separate. IOS ha un concetto simile?

    
posta dave 15.01.2018 - 13:59
fonte

1 risposta

2

Prenderò in considerazione l'utilizzo di ciò che viene comunemente definito atlante delle texture nella programmazione di giochi e grafica. In questo caso, potrei chiamarlo semplicemente un "atlante di immagini". Fondamentalmente, ci vogliono solo un mucchio di piccole immagini correlate e le combina in un'unica grande immagine.

Questo di solito è un vantaggio per le dimensioni del file perché molti file system hanno una dimensione minima del blocco per i dati. Spesso si tratta di circa 4 kilobyte. Se hai migliaia di immagini che sono solo poco più di 4k, allora si spreca il 50% dello spazio per ogni immagine. Diciamo che hai uno sprite che rappresenta il personaggio del giocatore, ed è formato RGBA a 4 canali ed è largo 36 x 36 pixel. Sarà 5184 byte. La dimensione del blocco di file successiva è di 8192 byte, quindi stai sprecando 8192 - 5184 = 3008 o il 36% dello spazio per i file. Quindi se riesci a mettere insieme molte di queste immagini, la percentuale di rifiuti va al ribasso. Nessun singolo file sprecherà più di 4096 - 1 = 4095 byte. Quindi prendere 1000 file che tutti sprecano in media 2k significa risparmiare 2 MB su spazio su disco.

È anche un vantaggio in memoria. Per i giochi, queste immagini vengono solitamente caricate sulla scheda grafica. Se si carica ciascuno separatamente, è possibile ottenere facilmente la memoria video frammentata man mano che vengono creati e distrutti. Quindi potresti finire con un sacco di piccoli buchi nella memoria video che insieme sono abbastanza grandi per un'allocazione più grande, ma dal momento che non sono contigui non possono essere usati. Cose simili possono accadere nella RAM, anche se al giorno d'oggi non è un problema dato i nostri ottimi sistemi di memoria virtuale.

Non sono un esperto di networking, ma immagino che potresti vedere alcuni risparmi anche lì, per ragioni simili all'esempio di spazio su disco sopra riportato. Non so se ci sono dimensioni minime dei pacchetti e quali sono gli intervalli su di essi, ma è qualcosa che potrebbe valere la pena di pensare.

    
risposta data 15.01.2018 - 18:12
fonte

Leggi altre domande sui tag