Ho un'applicazione di visualizzazione del database WPF: è una semplice finestra principale contenente un controllo utente con una griglia di dati che mostra i dati estratti da un database SQLite.
Il problema è che questa applicazione impiega 6 secondi per essere avviata fino a quando non è utilizzabile.Miglior tempo di avvio dell'app WPF percepito
Ho provato costruire il controllo utente (e facendo tutto il caricamento dei dati) nel costruttore della finestra principale:
La schermata iniziale verrà mostrato 5s questo modo, poi seguita da 1s di finestra principale vuoto finché l'applicazione è pronto per essere usato
Gli utenti hanno detto che ci vuole troppo tempo prima che qualcosa (visivamente) accada.
Ho quindi spostato la creazione del controllo utente (e il caricamento dei dati) nel gestore eventi Loaded della finestra principale: La schermata iniziale verrà mostrata 3s, seguita da 3s della finestra principale vuota finché l'applicazione non sarà pronta.
Gli utenti hanno detto che è "migliore", ma non mi piace il fatto che una finestra principale finita è mostrata in stato disabilitato per così tanto tempo.
Esiste qualche consiglio generale sul tempo di caricamento dell'applicazione percepito o ci sono altre raccomandazioni su come migliorare questa situazione?
Credo che idealmente la finestra principale sarebbe mostrata il più velocemente possibile, insieme a qualche ora di vetro o spinner fino al caricamento dei dati. Ma poi non posso semplicemente spostare la creazione del controllo utente in un worker in background, in quanto ciò avverrebbe nel thread sbagliato.
Qualcuno ha qualche suggerimento su questo problema?
Edit:
Nota che in questo momento ho appena assegnato una query LINQ to EF come origine dati griglia.
Una possibile miglioramento può essere quello di caricare questi dati in una tabella di dati in background e assegnarlo solo una volta caricato ...
Edit2: sto usando .net 4 con System.Data.SQLite e EF4 per caricare i dati. Ci sono più o meno 4000 righe e 30 colonne.
Quanti dati si stanno caricando dal database? Come stai caricando i dati - usando un ORM (se sì, quale?) O semplicemente ADO.NET? – alimbada
Informa gli utenti che sta succedendo molto. Scopri cosa sta realmente accadendo e ottimizza di conseguenza. Un loginscreen o splash esteso (con qualche animazione/progressbar ondulata) potrebbe essere esattamente quello che stanno cercando. – CodingBarfield
@alimbada: ho modificato la domanda per includere queste informazioni. Ma è più una questione generale che legata a Entity Framework, ecc. ADO.NET o qualsiasi ORM impiegherà il suo tempo per caricare i dati, potresti anche sostituirlo con Thread.Sleep (..). La domanda è più su come affrontare questo tipo di situazione. – Marc