2009-05-22 33 views
19

Sto avendo un dibattito con un altro programmatore con cui lavoro.DataTables vs IEnumerable <T>

Per un tipo di ritorno di database, Ci sono differenze di utilizzo della memoria significativa o prestazioni, o altri svantaggi che dovrebbe rendere una persona evitare di utilizzare il DataSet e DataTable e tipi di favore che implementano IEnumerable<T> ... o viceversa

I preferiscono tornare tipi che implementano IEnumerable<T> (List<T>, T[] etc) perché è più leggero, fortemente tipizzati all'oggetto quando si accede a proprietà, permette più ricco informazioni sul tipo di fondo ecc fanno prendere più tempo per impostare anche se quando manualmente utilizzando il lettore di dati.

è l'unica ragione per usare DataTable questi giorno solo pigrizia?

+0

piattaforma/lingua? Immagino che DataTable sia una struttura specifica per piattaforma; ma renderlo esplicito rende più facile rispondere a – Javier

+0

Certo, la piattaforma è .Net Framework (C# o vb) 2.0+ – CRice

+0

Non penso di aver usato un DataTable dal 2009, fanno schifo – CRice

risposta

18

DataTables sono sicuramente molto più pesanti di liste, sia in requisiti di memoria, e in tempo di processore trascorso la loro creazione/riempiendole.
L'utilizzo di un DataReader è considerevolmente più veloce (anche se più dettagliato) rispetto all'utilizzo di DataTable (presumo che si stia utilizzando un DataAdapter per riempirli).

Detto questo ... meno che non sia in qualche luogo dove davvero questioni, probabilmente stai bene in entrambi i casi, ed entrambi i metodi sarà abbastanza veloce, quindi basta andare con tutto ciò che è più a suo agio in ogni caso . (A volte vuoi riempirli con un piccolo codice, a volte vuoi leggerli con un piccolo codice)

Io stesso tendo ad usare solo DataTable quando sto legando a un GridView, o quando ho bisogno di più di un set di risultati attivo allo stesso tempo.

6

Uso DataTable direttamente se stessi significa legare all'origine dati sottostante e come si articola. Questo non va bene dal punto di vista della manutenibilità. Se tutte le tue esigenze di visualizzazione sono un elenco di alcuni oggetti, è tutto ciò che dovresti dare.

9

Un altro vantaggio di utilizzare le classi System.Collections è che si ottiene una migliore selezione e opzioni di ricerca. Non conosco alcun modo ragionevole per modificare il modo in cui un DataTable ordina o ricerca; con le classi di raccolta hai semplicemente implementato la tua classe IComparable o IEquatable e puoi personalizzare completamente il funzionamento di List.Sort e List.Contains.

anche con le liste non dovete preoccuparvi di DBNull, che mi ha scattato su più di un'occasione perché mi aspettavo nulla e ottenuto DBNull.

+3

Utilizzare un DataView per l'ordinamento e la ricerca. –

8

Mi piace anche il fatto che con IEnumerable<T> è possibile migliorare il tipo sottostante della raccolta con metodi e proprietà che rendono l'implementazione molto più elegante e il codice più gestibile. Ad esempio la proprietà FullName. Puoi anche aggiungere metodi di estensione alla classe se è fuori dal tuo controllo.

public class SomeUser 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string FullName { get { return String.Format("{0} {1}", FirstName, LastName); } } 
} 
0

ho trovato con grandi tavoli tramite SQL, tabella di dati è stato molto più veloce, invece di IEnumerable. Ho scaricato una tabella con 26k righe con 25 colonne in una singola pagina HTML. Datatable in 3 secondi, IEnumerable ha impiegato 9 secondi. Voto DataTable. Tutti i codewad sono identici tranne il tipo.

Problemi correlati