VB.NET: DataGridView si “freeza” quando carico tanti dati (UI thread?)

WinForms/WPF, servizi, integrazioni industriali, MySQL/SQL, performance e best practice.
Rispondi
marco
Messaggi: 9
Iscritto il: sab apr 05, 2025 12:12 am

VB.NET: DataGridView si “freeza” quando carico tanti dati (UI thread?)

Messaggio da marco »

Ciao a tutti,
sto imparando VB.NET WinForms e ho un problema: quando carico tante righe in un DataGridView (tipo 50k),
la form si blocca per parecchi secondi e Windows dice “Non risponde”.

Io faccio:
- query al DB
- ciclo For Each riga e aggiungo al DataGridView

C’è un modo semplice per evitare il freeze? Non sono pratico di thread/async.
Grazie!
Marco
fabio
Messaggi: 20
Iscritto il: gio mar 06, 2025 11:12 pm

Re: VB.NET: DataGridView si “freeza” quando carico tanti dati (UI thread?)

Messaggio da fabio »

Ciao Marco,
sì: il freeze è perché stai lavorando sul thread UI.

Due approcci “semplici”:
1) NON aggiungere righe una ad una: usa DataBinding
- metti i dati in un DataTable
- DataGridView.DataSource = DataTable
È molto più veloce.

2) Se la query è lenta: eseguila in background (Task/Async) e poi assegni il DataSource alla fine.

Prima domanda: stai già usando DataTable / BindingSource oppure fai .Rows.Add in loop?
marco
Messaggi: 9
Iscritto il: sab apr 05, 2025 12:12 am

Re: VB.NET: DataGridView si “freeza” quando carico tanti dati (UI thread?)

Messaggio da marco »

Sto facendo proprio Rows.Add in un loop ?
Recupero i dati con un DataReader e poi aggiungo cella per cella.

Quindi mi conviene riempire un DataTable e assegnarlo in blocco?
E se voglio formattare alcune colonne?
fabio
Messaggi: 20
Iscritto il: gio mar 06, 2025 11:12 pm

Re: VB.NET: DataGridView si “freeza” quando carico tanti dati (UI thread?)

Messaggio da fabio »

Esatto: DataTable + DataSource e poi formatti con:
- DataGridView.Columns("nome").DefaultCellStyle...
- eventi CellFormatting se serve.

Suggerimento “pro”: se hai 50k righe valuta anche:
- VirtualMode del DataGridView
- paginazione lato DB (LIMIT)
Ma per partire: DataTable + DataBinding ti cambia la vita.
Rispondi