Frage

Ich verwende derzeit eine DataTable, um Ergebnisse aus einer Datenbank zu erhalten, die ich in meinem Code verwenden kann.

Viele Beispiele im Web zeigen jedoch, dass stattdessen ein DataSet verwendet wird und über die Collections-Methode auf die Tabelle(n) zugegriffen wird.

Hat die Verwendung von DataSets oder DataTables als Speichermethode für SQL-Ergebnisse einen leistungsbezogenen oder sonstigen Vorteil?

War es hilfreich?

Lösung

Es hängt wirklich von der Art der Daten ab, die Sie zurückbringen.Da es sich bei einem DataSet praktisch nur um eine Sammlung von DataTable-Objekten handelt, können Sie mehrere unterschiedliche Datensätze in einem einzigen und daher besser verwaltbaren Objekt zurückgeben.

In Bezug auf die Leistung ist es wahrscheinlicher, dass nicht optimierte Abfragen zu Ineffizienzen führen, als wenn die „falsche“ Wahl des .NET-Konstrukts erfolgt.Zumindest ist das meine Erfahrung.

Andere Tipps

Ein wesentlicher Unterschied besteht darin, dass DataSets mehrere Tabellen enthalten können und Sie Beziehungen zwischen diesen Tabellen definieren können.

Wenn Sie jedoch nur eine einzige Ergebnismenge zurückgeben, würde ich denken, dass eine DataTable optimierter wäre.Ich denke, dass ein gewisser Overhead (zugegebenermaßen gering) erforderlich ist, um die Funktionalität eines DataSets anzubieten und den Überblick über mehrere DataTables zu behalten.

In 1.x gab es Dinge, die DataTables nicht konnte, DataSets jedoch (ich weiß nicht mehr genau, was).All das wurde in 2.x geändert.Ich vermute, dass viele Beispiele deshalb immer noch DataSets verwenden.DataTables sollten schneller sein, da sie leichter sind.Wenn Sie nur eine einzige Ergebnismenge abrufen, ist die beste Wahl zwischen beiden.

Eine Funktion des DataSet besteht darin, dass das DataSet jeweils über eine DataTable verfügt, wenn Sie in Ihren gespeicherten Prozeduren mehrere Select-Anweisungen aufrufen können.

Es gibt einige Optimierungen, die Sie beim Füllen einer DataTable verwenden können, z. B. den Aufruf von BeginLoadData(), das Einfügen der Daten und den anschließenden Aufruf von EndLoadData().Dadurch werden einige interne Verhaltensweisen innerhalb der DataTable deaktiviert, z. B. die Indexpflege usw.Sehen Dieser Artikel für weitere Details.

Wenn Sie ohnehin nur mit einer einzelnen Tabelle arbeiten, besteht der größte praktische Unterschied, den ich gefunden habe, darin, dass DataSet über eine „HasChanges“-Methode verfügt, DataTable jedoch nicht.Beide verfügen jedoch über ein „GetChanges“, sodass Sie dieses verwenden und auf Null testen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top