in

dotNet Umbria

Il primo User Group in Umbria sul mondo .Net
Latest post 06-20-2008 9:16 PM by Paolo Possanzini. 1 replies.
Page 1 of 1 (2 items)
Sort Posts: Previous Next
  • 06-18-2008 10:17 AM

    Rallentamento su caricamento degli item...

    Ciao,

     

    ho un panel che popolo con una lista di usercontrol a runtime pescando dal db i dati con cui valorizzare tali controlli.

    Quando faccio la foreach sul generic list che ritorna dal db e faccio la Controls.add nel pannello succede una cosa

    singolare; c'è una sorta di degrado delle prestazioni del ciclo! i primi controlli vengono valorizzati e aggiunti velocemente

    ma più il ciclo e lungo (300 elementi nel mio caso) e più l'operazione si rallenta.

    Me ne accorgo perchè ho aggiunto una progressbar che vado ad incrementare ogni volta che faccio una add al pannello.

    Perchè??

    Daniele

     

  • 06-20-2008 9:16 PM In reply to

    Re: Rallentamento su caricamento degli item...

    E' abbastanza normale, a occhio si tratta di Windows Forms.
    Ogni volta che aggiungi un controllo al tuo panel, vengono invocati una serie di eventi che permettono ai parent di accorgersi della modifica alla UI, in modo particolare ControlAdded è l'evento che viene sollevato nel tuo caso.
    Questo provoca il redraw della interfaccia utente anche per le parti che non sono attualmente visibili. Quindi se il tuo panel ha una scrollbar, vengono disegnati tutti i controlli anche se si trovano fuori dell'area visibile.

    Ovviamente più controlli ci sono e più tempo viene impiegato ogni volta per ridisegnare tutto.
    Questo è il motivo del degrado che hai notato.

    Ti consiglio di invocare il metodo SuspendLayout prima di iniziare il tuo ciclo e ResumeLayout alla fine del ciclo.
    Questo migliora le performance perchè informa i controlli che il redraw è temporaneamente sospeso e quindi anche se la lista di controlli cambia non vengono invocati i metodi di Paint.

    http://msdn.microsoft.com/en-us/library/system.windows.forms.control.suspendlayout.aspx

    Ciao

Page 1 of 1 (2 items)
dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems