2009-05-22 19 views
19

Ich habe eine Debatte mit einem anderen Programmierer, mit dem ich arbeite.DataTables vs IEnumerable <T>

Für eine Datenbank Rückgabetyp, gibt es erhebliche Speichernutzung oder Performance-Unterschiede oder andere Nachteile, die jemand die Datasets und Datatables und für Arten verwendet, die IEnumerable<T> implementieren vermeiden machen sollte ... oder umgekehrt

I bevorzugen Rückgabetypen, die implementieren IEnumerable<T> (List<T>, T[] etc), weil es leichter ist, stark auf das Objekt beim Zugriff auf Eigenschaften typisiert, ermöglicht reichere Informationen über den zugrunde liegenden Typ usw. Sie nehmen mehr Zeit zum Einrichten, wenn Sie den Datenleser manuell verwenden.

Ist der einzige Grund, DataTables an diesem Tag nur Faulheit zu verwenden?

+0

Plattform/Sprache? Ich nehme an, dass DataTable eine plattformspezifische Struktur ist; aber macht es explizit macht es einfacher zu beantworten – Javier

+0

Sicher ist die Plattform das .Net Framework (C# oder vb) 2.0+ – CRice

+0

Ich glaube nicht, dass ich eine DataTable seit 2009 verwendet habe, sie saugen – CRice

Antwort

18

DataTables sind definitiv viel schwerer als Listen, sowohl hinsichtlich der Speicheranforderungen als auch hinsichtlich der Prozessorzeit, die für das Erstellen/Füllen der Daten benötigt wird.
Die Verwendung eines DataReader ist erheblich schneller (obwohl ausführlicher) als die Verwendung von DataTables (ich gehe davon aus, dass Sie einen DataAdapter verwenden, um sie zu füllen).

Das heißt ... Es sei denn, dies ist in einem Ort, wo es wirklich Angelegenheiten, sind Sie wahrscheinlich gut so oder so, und beide Methoden wird schnell genug sein, so gehen Sie einfach mit dem, was in jedem Fall mehr bequem . (Manchmal möchten Sie sie mit wenig Code füllen, manchmal möchten Sie sie mit wenig Code lesen)

Ich selbst neige dazu, DataTables nur zu verwenden, wenn ich an eine GridView binde oder wenn ich mehr als eine Ergebnismenge benötige aktiv zur gleichen Zeit.

6

Die direkte Verwendung von DataTables bedeutet, dass Sie sich an die zugrunde liegende Datenquelle und deren Anordnung binden müssen. Aus Wartbarkeitsgesichtspunkten ist das nicht gut. Wenn alle Ihre Sichtanforderungen eine Liste einiger Objekte sind, sollten Sie es nur geben.

9

Ein weiterer Vorteil der Verwendung der System.Collections-Klassen besteht darin, dass Sie bessere Sortier- und Suchoptionen erhalten. Ich kenne keinen vernünftigen Weg, die Art und Weise, wie eine DataTable sortiert oder sucht, zu ändern. Mit den Auflistungsklassen implementieren Sie einfach Ihre Klasse IComparable oder IEquatable, und Sie können vollständig anpassen, wie List.Sort und List.Contains funktionieren.

Auch mit Listen müssen Sie sich nicht um DBNull sorgen, was mich mehr als einmal stolpern ließ, weil ich Null erwartete und DBNull bekam.

+3

Verwenden Sie ein DataView zum Sortieren und Suchen. –

8

Ich mag auch die Tatsache mit IEnumerable<T>, dass Sie den zugrunde liegenden Typ der Sammlung mit Methoden und Eigenschaften verbessern können, die Implementierung viel eleganter macht, und der Code wartungsfreundlicher. Zum Beispiel die FullName-Eigenschaft. Sie können der Klasse auch Erweiterungsmethoden hinzufügen, wenn Sie nicht in Ihrer Kontrolle sind.

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

ich mit großen Tabellen über SQL, Datentabelle gefunden war viel schneller statt IEnumerable. Ich habe eine Tabelle mit 26.000 Zeilen mit 25 Spalten in einer einzigen HTML-Seite ausgegeben. Daten in 3 Sekunden, dauerte IEnumerable 9 Sekunden. Ich stimme DataTable. Alle codewad identisch mit Ausnahme des Typs.

Verwandte Themen