2010-02-12 10 views
5

Nella nostra applicazione n-tier attualmente non così moderna, facciamo un uso intuitivo di DataSet e stiamo valutando la modifica di altri oggetti più leggeri (cioè collezioni di oggetti tipizzati).Qual è il costo di memoria di un DataSet rispetto ad altre classi Collection .Net?

Esiste un documento di riferimento su quanto siamo in grado di guadagnare in consumo di memoria per farlo?

+0

ho quasi che questo sia il tipo di domanda in cui la risposta dipende da un sacco di fattori, tra cui come gli oggetti tipizzati sono strutturati. Hai provato a gestire alcuni benchmark? Come serializzare diverse migliaia di oggetti rispetto agli stessi dati in un set di dati. – David

+0

Non sono sicuro di poter confrontare DataSet con databile relazionale offline con tipi di raccolta che sono elenchi di oggetti simili. Possiamo confrontare List e ArrayList, matrici ed elenchi ma non dataset. – sashaeve

+0

Ciao @sash, grazie per il tuo contributo. Quello che intendo è che linq to entities e linq to sql entrambi producono collezioni di oggetti da un'origine dati relazionale e sono stati il ​​naturale sostituto di ADO.Net che utilizza DataSet. Quindi, in questi termini, penso che possano essere confrontati. – jmservera

risposta

3

I battitori pesanti utilizzo della memoria per un DataSet sono oggetto DataRow richiesto per ogni riga in un DataTable e l'indice che viene automaticamente generato per ciascuna colonna. Lo stoccaggio dei valori delle colonne è efficiente, non è possibile migliorarlo. Sostituire questo con una raccolta di raccolte generiche consentirà l'eliminazione dei DataRows, che potrebbero essere un risparmio del 50% se il DataTable non ha molte colonne.

Gli indici è quello che avete bisogno di preoccuparsi. Effettuano le query sul DataSet molto velocemente, perderai questo se non fornisci qualche tipo di sostituto personalizzato. Se è necessario fornire un sostituto è impossibile dirlo, dipende dal tipo di query che si esegue.

+0

Grazie per i tuoi suggerimenti. Utilizziamo DataSet principalmente per la modifica, proprio come gli oggetti persistenti, quindi non usiamo molto le funzioni di indicizzazione. Quello che usiamo più è la funzione RowVersion per sapere cosa è stato modificato. – jmservera

0

Questa domanda è abbastanza soggettiva e dipende da molti fattori che non possono essere visualizzati qui. Se la domanda fosse: un DataSet consuma più memoria di una collezione generica dello stesso numero di oggetti, allora la risposta è generalmente sì.

Dal momento che la domanda è quanto dipenderà dalle specifiche di come si sta utilizzando il DataSet (ad esempio: dati digitati, DataViews ?, indici?) E solo misurati accuratamente attraverso il test.

Tuttavia, a seconda di come si utilizza i dataset potrebbe essere necessario ricostruire gran parte di tale funzionalità.

Problemi correlati