2009-03-26 17 views
6

Ho una serie di moduli e navigare tra di loro.Come velocizzare il rendering .NET winforms

Ogni modulo ha un set di controlli per il quale carico proprietà dal database SQLite e questa è l'operazione lunga (circa 1s) che non dà agli utenti la sensazione migliore perché il modulo viene disegnato gradualmente.

Non mi interessa il ritardo, ma mi piacerebbe che il modulo fosse disegnato quando tutti i dati sono stati caricati. Mi piacerebbe evitare nuovi thread perché ciò comporterebbe problemi di funzionamento cross-thread.

Esiste una buona soluzione oltre a velocizzare l'intera applicazione effettuando il caching dei dati caricati?

risposta

0

Indietro in VB giorni ho usato l'API LockWindowUpdate. Poiché questo richiede un handle di finestra, dovrebbe essere utilizzabile anche con WinForms. Comunque, mai provato.

4

C'è un modo semplice per velocizzare le prestazioni percepite di molti controlli, soprattutto quelle ad alta intensità di dati, come listviews, listboxes, caselle combinate ecc

Prima si popolano loro chiamano il metodo BeginUpdate() e quando è fatto chiamare il EndUpdate(). Ciò disabilita il ridisegno del controllo fino a quando non viene completato il popolamento con i dati.

1

Ho riscontrato che il caricamento dei controlli di Winform, come le caselle combinate e le liste, si carica molto più velocemente quando puntano a Viste anziché a un tavolo stesso, specialmente se è possibile limitare la visualizzazione ad essere più snella rispetto al controllo avente guardare attraverso un intero tavolo.

2

Siamo spiacenti. Questo è il threading per. I "problemi di funzionamento a thread incrociati" sono ben definiti e ci sono modelli comuni per gestirli. Basta ridurre i punti in cui i thread interagiscono al minimo (in questo caso, si tratterebbe di un singolo luogo, dopo che i dati sono stati caricati) e diventa banale.

Ci sono anche alcune classi che rendono il multithreading in un'app winforms molto più semplice, poiché estrapolano l'interazione tra i thread. Lo BackgroundWorker (link al post del blog su di esso) eseguirà il lavoro su un altro thread per te e ti avviserà quando viene eseguito attivando un evento sul thread dell'interfaccia utente. Ottieni i vantaggi del multithreading senza le trappole.