Performanceprobleme beim Update vom Dataset

Ferum

Mitglied
Hallo Zusammen,

ich habe ein kleines Performanceproblem und frage mich wie ich es optimieren kann.

Der Aufbau ist eine VB 2008 Anwendung die als Datengrundlage eine mdb-Datei hat.
Ich habe mir ein stark typsiertes Dataset angelegt und fülle eine Tabelle mit den Boardmitteln. (siehe Code)

Code:
taRabatte.Fill(dsRabatte.Rabatte)
 
dsRabatte.Rabatte.AddRabatteRow(fMatrix.gDebitor, reader("MG1").ToString, reader("MG2").ToString, reader("Bestelltyp").ToString)
 
taRabatte.Update(dsRabatte)

Direkt im Anschluß des Update, lese ich die komplette Tabelle wieder aus um sie in einem DGV anzuzeigen.
Wenn ich dieses Update auf das Dataset nutze, benötige ich etwa 5 Sekunden bis ich den neuen Eintrag wieder aus der Tabelle lesen kann.
Wenn ich jedoch direkt einen SQL-Insert nutze, habe ich dieses Problem nicht.

Code:
cmd.Connection = gCon
 
cmd.CommandText = "INSERT INTO Rabatte " & _
                                       "(Debitor, MG1, MG2, Bestelltyp)" & _
                                       "VALUES (" & fMatrix.gDebitor & ", '" & reader("MG1").ToString & "', '" & reader("MG2").ToString & "', '" & reader("Bestelltyp").ToString & '")"
 
cmd.ExecuteNonQuery()

Mache ich etwas falsch, wenn ich das Dataset nutze? Gibt es eine Möglichkeit die Zugriffe zu optimieren?
 
Wenn du auf Performance aus bist, dann solltest du die Verwaltung deiner Daten selbst übernehmen und auf DataSet, DataAdapter und Co. verzichten. Nur so hast du auch wirklich die Möglichkeit, auf den Ablauf Einfluss zu nehmen und an den wichtigsten Stellen die für dich notwendige Geschwindigkeit zu erreichen. Daher solltest du die Daten ohne DataAdapter und Dataset holen und Aktualisierungen per Command durchführen.

Bei Commands kannst du zusätzlich Performance gewinnen, indem du mehrere Update/Insert-Statements zusammen fasst und durch einen Command-Aufruf abarbeiten läßt. Ebenfalls bietet es sich an, bei zahlreichen Statements, die gleiche Command-Instanz wiederzuverwenden.
 
Ok, also ist das Dataset vielleicht nicht ganz das richtige an dieser Stelle.
Inzwischen bin ich dazu übergegangen, alles ausschließlich mit normalen SQL-Statments zu machen.
Danke für den Tip. :)
 
Zurück