2016-04-15 11 views
-1

Ich versuche, eine große. NET-Anwendung zu erstellen, die einige Daten aus einer Datenbank behandelt (alle möglichen Operationen auf der Datenbank, Einfügungen, Ansichten, Sortierung, zeilenbasierte Berechnungen ...).Ist DataSet im Vergleich zu DataReader wirklich langsam?

Ich bin kein Experte in ADO und möchte sicherstellen, dass meine Architektur optimal ist. Also versuche ich DataSet vs DataReader zu vergleichen, um zu wissen, wann ich welches verwende.

Ich habe eine Dummy-Tabelle in Oracle erstellt und ich füllte mit 2 000 000 Datensätzen. Wenn ich die Größe der Tabelle mit Hilfe der Abfrage überprüfe:

Ich bekomme so etwas wie 100 MB für diese Tabelle.

Ich lese in MSDN, dass DataSet alles über die Tabelle lädt, während DataReader ein Vor-nur-Lese-Tool ist, das schneller ist.

ich bin versucht, testet die Grenzen eines jeden, also schrieb ich den folgenden Code:

SQL = "Select * from HugeTable" 
Command = New OracleCommand(SQL, Me.Connection) 
TempDataAdapter = New OracleDataAdapter(Command) 
TempDataAdapter.FillSchema(DataSet, SchemaType.Source, FullTableName) 
TempDataAdapter.Fill(DataSet, FullTableName) 

Wenn mein Verständnis richtig ist, ich bin exepecting die letzte Zeile 100 MB aus der Datenbank zu laden Das wird einige Sekunden dauern (die Datenbank befindet sich im selben Computer) Aber wenn ich diesen Code ausführe, ist es augenblicklich (es läuft in ein paar hundertstel Sekunden und ich kann nicht verstehen, warum es ist.

Gibt es etwas Ich vermisse?

+0

Warum nach unten gehen? Was ist falsch an der Frage? –

+1

Nicht mein Downvote, aber denken Sie darüber nach: Was denken Sie, der DataAdapter verwendet, um ein DataSet zu füllen? – Steve

+0

Entschuldigung. Ich habe deine Frage nicht verstanden. –

Antwort

0

Es hängt alles davon ab, was Sie tun. Sie haben Recht - ein Dataset lädt den gesamten Inhalt des Abfrageergebnisses in den Speicher, was unter bestimmten Umständen möglicherweise der Fall ist.

DataReader ist ein "Feuerwehrschlauch", der Ihnen Daten zuführt, während Sie davon lesen. Speicher effizient, aber nur vorwärts. (DataSets werden von DataReaders aufgefüllt!)

Also ich denke, dass Sie mehr auf das konzentrieren sollten, was Sie mit den Daten tun möchten, um zu entscheiden, wie Sie es lesen.

+0

Vielen Dank für Ihre Antwort. Eigentlich versuche ich nicht zu bestätigen, was Microsoft in seiner Dokumentation angegeben hat. Ich versuche, die Grenzen des Geschwindigkeitsverlustes zu überprüfen, um von einer Lösung zu einer anderen zu wechseln ... Um genauer zu sein, einige meiner Tabellen enthalten x Zeilen und andere wahrscheinlich 1000 mal x. Also würde ich gerne wissen, wenn der Geschwindigkeitsverlust signifikant ist, um zu prüfen, ob diese Lösung oder die andere ... –

+0

Sie müssen über mehr als nur Geschwindigkeit denken - Speicherverbrauch ist auch hier eine große Sache. Wenn Sie nicht gleichzeitig 100 MB im Speicher benötigen, tun Sie es nicht. Insbesondere in einer Mehrfachanforderungsumgebung (wie bei einem Webserver) werden mehrere von diesen, die gleichzeitig viel Speicher verbrauchen, nicht skaliert. – n8wrl

+0

Ja genau Speed ​​- Memory. Und wieder bin ich auf der Suche nach einem Weg, um die Grenzen von jedem zu testen und nicht eine generische Antwort wie uns: DataReader ist schneller, also verwenden Sie DataReader. –

Verwandte Themen