• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Sviluppo giochi 2D vb.net - Prestazioni e ottimizzazione

Garu

Utente Attivo
Autore del topic
9 Ottobre 2011
412
0
Miglior risposta
0
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
 
Riferimento: Sviluppo giochi 2D vb.net - Prestazioni e ottimizzazione

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

Come hai calcolato i millisecondi ?
 
Riferimento: Sviluppo giochi 2D vb.net - Prestazioni e ottimizzazione

Il .net offre un metodo molto semplice e preciso:
dim x as new stopwatch

x.start

'codice....

x.stop

il tempo sarà x.milliseconds