20/03/2024 - Sgrubak ha scritto:
Ma hai provato a gestire la DoubleBuffered? Alka suggeriva di disabilitarla, ma secondo me non ce l'hai attivata.
Ciao Sgrubak
grazie per la dritta e in men che non si dica ho RISOLTO
Purtroppo il controllo datagridview non ha una proprietà DoubleBuffered , ma creando una Classe di Estensione si riesce a creare il metodo anche per la datagridview.
Pertanto ho aggiunto una classe in name space per costruire il metodo doublebuffered in questo modo:
(se il metodo è valido e consono poi lo inserirò nella mia libreria dll generale per rendere la classe fruibile per tutti i progetti dove necessita)
// CLASS EXTENSION METHODS - DATAGRIDVIEW PERFORMANCE MANAGEMENT
public static class MyExtensionMethods
{
// PUBLIC DOUBLE BUFFERED METHOD
public static void MyDoubleBuffered(this DataGridView dgv, bool setting)
{
// get type and property info
var dgvType = dgv.GetType();
var pInfo = dgvType.GetProperty("DoubleBuffered", BindingFlags.Instance | BindingFlags.NonPublic);
// set value
pInfo.SetValue(dgv, setting, null);
}
}
In Form Load ho aggiuto il richiamo al metodo da associare alla datagridview in questione::
// FORM LOAD
private void FormTabelloneRitardi_Load(object sender, EventArgs e)
{
// create datatable tabellone for datagridview
MyCreateDataTableColumns();
// set datagridview double buffered
---->>> DgvTab.MyDoubleBuffered(true); <<<----
// load datagridview
MyDatagridviewCreateLoad();
}
Basta! non ho fatto altro … rispetto al codice e all'impostazioni originali del progetto.
Il risultato è più che soddisfacente, in pratica la datagridview risponde in modo istantaneo senza nessun tipo di latenza nella gestione della grafica.
Esempio: Adesso risponde così…
Mentre prima era così:
(una bella differenza)
Io direi che è perfetto !!! ;-)
Preso visione della documentazione l'unico aspetto che ritengo importante, in questo caso specifico, è relativo al consumo della memoria e della cpu.
Ho stressato con test più volte l'applicazione e non ho registrato nessun incremento nel consumo di memoria e cpu… i valori sono identici a quelli che avevo prima senza il doublebuffered.
Che dire… ti ringrazio per la dritta e ringrazio tutti gli altri per i loro contributi.
Un saluto a tutti.
;-) e grazie di nuovo a tutti