Salve a tutti, ho iniziato la creazione di un semplice gioco|sandbox, creato il codice base mi sono subito imbattuto in un grosso problema: le prestazioni. Il gioco era interamente basato su picturebox create dinamicamente (in run-time) (i nemici) che dovevano seguire un un altra picturebox (il giocatore). Qui sono sorti i primi problemi, già con 20 Nemici in movimento il frame rate calava dai 60-64 a 50, causando rallentamenti all'intero gioco. Malgrado abbia provato di tutto, ottimizzato all'impossibile qualsiasi funzione, routine... Il gioco rimaneva irrimediabilmente lento, così ho capito che il problema di fondo erano proprio le picturebox, facendo una rapida ricerca su internet ho scoperto che effettivamente i controlli picturebox sono lenti per "natura". Il mio obbiettivo era comunque quello di sviluppare un gioco in 2D senza usare librerie esterne, così ho optato per le GDI+ già contenute nel vb.net .
Ovviamente ho voluto provare di persona se le GDI+ fossero effettivamente più performanti. ecco ciò che ho potuto constatare:
Gdi+
-Prestazioni
-Gestione veloce di più oggetti, anche con classi personalizzate
-Possibilità di utilizzare il multithreading per la creazione,spostamento e quant'altro
-Obbligatorio creare gli oggetti a run-time
PictureBox
-Possibilità di creare oggetti e di gestirne le proprietà già dall' ide
-Lentezza nella gestione dinamica
-Consumo eccessivo risorse
-Impossibilità multithreading
-Eccessiva lentezza nel gestire più oggetti
Test applicativi
Creazione 30 Oggetti
Gdi+: 1 ms
Picturebox: 31 ms
Creazione 100 Oggetti
Gdi+: 5 ms
Picturebox: 90 ms
Creazione 500 Oggetti
Gdi+: 24 ms
Picturebox: 494 ms
Creazione 1000 Oggetti
Gdi+: 51 ms
Picturebox: 1551 ms
Creazione 10000 Oggetti
Gdi+: 318 ms
Picturebox: Errore durante il test
Ram:
Creazione 1000 Oggetti
Gdi+: 4 Kb
Picturebox: 1106 Kb
Creazione 10000 Oggetti
Gdi+: 400 Kb
Picturebox: [test non completato] più di 8Mb
Utilizzo Cpu
Spostamento 50 Oggetti
Gdi+: 2%
Picturebox: 7- 8%
Ottimizzazione del sorgente
In lavorazione
Ovviamente ho voluto provare di persona se le GDI+ fossero effettivamente più performanti. ecco ciò che ho potuto constatare:
Gdi+
-Prestazioni
-Gestione veloce di più oggetti, anche con classi personalizzate
-Possibilità di utilizzare il multithreading per la creazione,spostamento e quant'altro
-Obbligatorio creare gli oggetti a run-time
PictureBox
-Possibilità di creare oggetti e di gestirne le proprietà già dall' ide
-Lentezza nella gestione dinamica
-Consumo eccessivo risorse
-Impossibilità multithreading
-Eccessiva lentezza nel gestire più oggetti
Test applicativi
Creazione 30 Oggetti
Gdi+: 1 ms
Picturebox: 31 ms
Creazione 100 Oggetti
Gdi+: 5 ms
Picturebox: 90 ms
Creazione 500 Oggetti
Gdi+: 24 ms
Picturebox: 494 ms
Creazione 1000 Oggetti
Gdi+: 51 ms
Picturebox: 1551 ms
Creazione 10000 Oggetti
Gdi+: 318 ms
Picturebox: Errore durante il test
Ram:
Creazione 1000 Oggetti
Gdi+: 4 Kb
Picturebox: 1106 Kb
Creazione 10000 Oggetti
Gdi+: 400 Kb
Picturebox: [test non completato] più di 8Mb
Utilizzo Cpu
Spostamento 50 Oggetti
Gdi+: 2%
Picturebox: 7- 8%
Ottimizzazione del sorgente
In lavorazione