PDA

View Full Version : [C#] Ottimizzare/Velocizzare la disposizione dei componenti


Lim
14-03-2009, 08:48
Sto sviluppando un software con C# per la gestione di un Crono Calendario.
Il SW estrae da un DB (in MySQL) delle prenotazioni/impegni e li visualizza su una griglia dove le colonne sono i giorni del mese e le righe sono gli impegni.
Su ogni pagina visualizza 2 mesi alla volta.


Probabilmente non ho scelto l'implementazione migliore, ma li x li sembrava essere una soluzione rapida.

Allora, l'approccio seguito è questo, creo dinamicamente:
- Array di Label (per i giorni del mese),
- Array di comboBox (per gli impegni),
- Array di Label (per l'intersezione giorno/impegno).

Ogni label poi ha un colore scelto secondo certi criteri.


Ho inserito i tasti di navigazione per andare avanti o indietro nella visualizzazione del mese di interesse.
Il problema è che ora la visualizzazione è molto lenta, ci vuole un pò di tempo prima che le due griglie vengano visualizzate e che gli impegni vengano collocati.

A quanto pare tutti questi componenti appesantiscono il sistema, avete qualche suggerimento per ottimizzare questo approccio? oppure approcci alternativi?:help:

MarcoGG
14-03-2009, 09:56
Forse qualcosa in termini di velocità lo puoi guadagnare rendendo invisibili i controlli in fase di posizionamento e/o ridimensionamento. Il continuo refresh dell'interfaccia grafica ad ogni elemento inserito si mangia sempre un po' di tempo. In alternativa, puoi provare i metodi SuspendLayout e ResumeLayout per interrompere la logica di Layout della Form ( o del container interessato ), durante la creazione degli oggetti... :

this.SuspendLayout();
// ...
// ...
this.ResumeLayout();

Visto che, da quel che ho capito, in pratica ti stai creando pezzo per pezzo una specie di griglia dati, potresti considerare l'uso di una DataGridView, magari unbound, con un DataReader e l'aggiunta di tutte le condizioni che vuoi ( potresti ottenere un DataGridView con campi calcolati, aggiunti, ecc... ), molto più flessibile che avere un binding diretto con una tabella... ;)