Frage

Ich arbeite an einem .NET -Programm, das willkürliche Skripte gegen eine Datenbank ausführt.

Als eine Kollegin anfing, den Datenbankzugriffscode zu schreiben, gab er einfach ein Befehlsobjekt dem Rest der wiederverwendeten Anwendung vor (Einstellung CommandText/Type, rufen ExecuteNonQuery() usw.) für jede Aussage.

Ich kann mir vorstellen, dass dies ein großer Leistungstreffer für wiederholte, identische Aussagen ist, da sie jedes Mal neu analysiert werden.

Was ich mich jedoch wundere, ist: Wird dies auch die Ausführungsgeschwindigkeit beeinträchtigen, wenn sich jede Anweisung von der vorherigen unterscheidet (nicht nur unterschiedliche Parameter, sondern eine völlig andere Aussage)? Ich konnte in der Dokumentation nicht leicht eine Antwort dazu finden.

Übrigens ist die verwendete RDBMS Oracle, aber ich denke, diese Frage ist nicht wirklich datenbankspezifisch.

PS Ich weiß, dass gleiche das Gleiche enthüllt Command Objekt ist nicht sicher, dass Thread sicher ist, aber das ist hier kein Problem.

War es hilfreich?

Lösung

Es gibt einige Overheads, um neue Befehlsobjekte zu erstellen. Unter bestimmten Umständen kann es sinnvoll sein, denselben Befehl wiederzuverwenden. Aber wie der allgemeine Fall für einen ganzen Antrag erzwungen wird, scheint es mehr als ein wenig seltsam.

Andere Tipps

Die Leistung des Auftritts entsteht normalerweise aus der Herstellung einer Verbindung zur Datenbank, aber ADO.NET erstellt hier einen Verbindungspool, der hier hilft.

Wenn Sie jedes Mal neu analysiert werden möchten, können Sie sie in gespeicherte Verfahren einfügen.

Ich kann mir vorstellen, dass Ihr Kollege nur einen alten Stilansatz verwendet, den er von der Arbeit an anderen Plattformen geerbt hat, auf denen die Wiederverwendung eines Befehlsobjekts einen Unterschied gemacht hat.

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