132 messaggi dal 14 febbraio 2007
Ciao a tutti,

Non riesco a capire come mai in una mia pagina .xaml ho un caricamento lentissimo di una ListBox anche se il caricamento interessa solo 3 elementi :S

Il codice è il seguente:

var itemsInDB = ( ....query con linq);
ListItems = new ObservableCollection<DettaglioItem>(itemsInDB);

Pensavo che la query, pur essendo semplice, fosse lenta ma ho constatato che il rallentamento è dato dalla linea di codice ListItems =new ObservableCollection<DettaglioItem>(itemsInDB);

Ho provato anche a fare l'assegnazione diretta alla ListBox nel seguente modo ma risulta lenta allo stesso modo:
ListBox1.ItemsSource = ( ....query con linq);

Qualcuno ha una vaga idea come potrei ottimizzare il tutto?
se itemsInDB è l'assegnazione della query, e quindi è di tipo IQueryable, in realtà l'esecuzione avviene nel momento in cui crei l'observablecollection, dato che deve prendere e travasare nella collezione.
Quindi il problema di prestazione è nella query, devi lavorare su di essa. Magari invocala e crea la ObservableCollection in un altro thread, e poi assegnalo a listitems sul threa principale.

Ciao

Il mio blog
Homepage
132 messaggi dal 14 febbraio 2007
Grazie per la risposta, effettivamente hai ragione, è come dici tu!

Senti ma per caso sapresti indicarmi un metodo veloce per eliminare dei record dal DB?
Ho provato ad implementare un DeleteAllOnSubmit ma risulta estremamente lento per un numero di record pari a 200..
C'è poco da fare :-) Esegui la query in asincrono in modo da non bloccare l'interfaccia. L'importante che non sia lento nel selezionare i 200 record
Inviato dall'app per Windows 8

Ciao

Il mio blog
Homepage
132 messaggi dal 14 febbraio 2007
Purtroppo lo immaginavo che ci si faceva poco.
Mi chiedevo:
Io lancio un thread che faccia l'eliminazione dei miei 200 elementi e non tengo così bloccata l'interfaccia (visto che sposterei il carico di lavoro su un thread diverso dall'UI Thread). Ma se un utente esce dall'applicazione prima che il thread abbia finito il suo lavoro?
Forse meglio se faccio dei "Commit" ogni tot elementi eliminati così che quando l'utente esce almeno qualche delete sia andata a buon fine?
In questo scenario dovrei anche prevedere che all'apertura dell'app ci sia un controllo che vada a vedere la presenza di record non eliminati ed in tal caso eliminarli in asincrono..

Credi che possa essere una soluzione ragionevole o mi consigli di fare un'altra strada?

Grazie mille

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.