Creazione di oggetti guidati dal database per popolare una visualizzazione ad albero: molto lenta

StackOverflow https://stackoverflow.com/questions/56224

Domanda

Ho un'applicazione che legge una tabella da un database.

Emetto una query SQL per ottenere un set di risultati, in base a un valore di stringa univoco che raccolgo dai risultati, utilizzo un'istruzione case/switch per generare determinati oggetti (ereditano TreeNode BTW).Questi oggetti creati vengono deviati in un oggetto Dictionary da utilizzare in seguito.

Durante la generazione di questi oggetti utilizzo alcuni dei valori del set di risultati per popolare i valori nell'oggetto tramite i setter.

Interrogo il dizionario per restituire un particolare tipo di oggetto e lo utilizzo per popolare una visualizzazione ad albero.Tuttavia non è possibile popolare 2 oggetti dello stesso tipo in una visualizzazione ad albero dall'oggetto Dictionary (si riceve un errore di runtime - che al momento mi sfugge, qualcosa che ha a che fare con il riferimento allo stesso oggetto).Quindi quello che devo fare è usare un memberswiseClone e implementare IClonable per aggirare questo problema.

Lo sto facendo bene?Esiste un modo migliore, perché penso che questo stia rallentando molto il mio programma a questo punto.Per lo meno penso che sia un po' goffo - qualsiasi consiglio da parte di persone che ne sanno più di me - è molto apprezzato.

È stato utile?

Soluzione

Per aggiungere a @Brad, popolare l'albero solo secondo necessità.Ciò significa agganciarsi all'evento di espansione dei nodi dell'albero.Questo è simile al funzionamento di Esplora risorse quando si ha a che fare con le condivisioni di rete.

Dovrebbe essercene 1 TreeNode oggetto per nodo effettivo dell'albero nell'albero: non provare a riutilizzare le cose.Puoi associarli ai tuoi dati utilizzando la proprietà Tag (questo è il metodo consigliato) oppure puoi sottoclassare il file TreeNode stesso (questo è il metodo Java, ma utilizzato meno in .NET).

(L'uso di metodi di clonazione è solitamente un suggerimento che stai (a) facendo qualcosa di sbagliato, o (b) devi considerare il tuo modello di dominio per separare gli oggetti mutabili da quelli immutabili.)

Altri suggerimenti

C'è un motivo per cui stai utilizzando il dizionario esterno?Popolerei l'albero direttamente quando vengono interrogati i dati.

Se hai bisogno del dizionario, puoi impostare la proprietà .Tag del nodo dell'albero in modo che punti ai dati nel tuo dizionario.

hai considerato l'utilizzo di una visualizzazione ad albero virtuale che carica solo i nodi che l'utente desidera effettivamente guardare? Ho avuto un buon successo con il componente di www.infralution.com

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top