PetaPoco Einfügen - Schnellste Methode?
Was ist die Schnellste option zum einfügen von Datensätzen in die Datenbank: mit dem von diesen:
Database.Insert(poco)
Database.Insert(tableName, pkName, poco)
Database.Save(poco)
Database.Save(tableName, pkName, poco)
Welche soll ich verwenden für die performance-Gründen? Man ist nicht weniger bequem für mich, als die anderen...
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
Database.Save
Methoden, um den Wert des Primärschlüssel-Feld mitGetValue
, dann ruftDatabase.Insert
oderDatabase.Update
entsprechend.Daher sollten Sie nur verwenden
Database.Save
wenn dein code wirklich braucht, um änderungen zu speichern, die auf ein Objekt kann es sich entweder um neue oder bereits bestehende. Beachten Sie auch, dass Ihre Tabelle muss haben eine auto-increment primary key-Spalte fürDatabase.Save
zu arbeiten.Sogar ohne den leichten performance-Unterschied, das ich lieber auf der richtigen Semantik - Insert-oder Update Speichern.
Dass ist nicht wirklich wahr.
Database.Insert(poco)
wird, sucht die Werte fürtableName
undpkName
im benutzerdefinierten Attribute für die definition der poco-Klasse. Wenn Sie die T4-Vorlagen, diese Werte gehalten werden, in Synchronisation mit Ihrer Datenbank automatisch, und Sie wird nur angegeben werden, an einem Ort. Auf der anderen Seite, wenn Sie übergeben Sie in jedem Aufruf der Methode, die Sie wiederholt sich unzählige Male in Ihrem gesamten code-Basis. TROCKEN. Was ist, wenn Sie ändern müssen Sie die Werte später?Nun
Database.Insert(poco)
wird etwas weniger performant durch, die Suche. Allerdings PetaPoco speichert das Ergebnis der Suche in einer statischen Wörterbuch, so dass die Auswirkungen auf die Leistung sehr klein sein wird nach der ersten Suche:object
's, und Sie alle Veränderungen auf einmal. Offensichtlich, müssen Sie möglicherweise nicht die Fähigkeit, aber es ist ein Kompromiss mit der poco-KlasseUsers.GetTableName()
zum Beispiel.In alle 4 Methoden, die Sie aufgelistet, die sich für Einsätze, es sieht aus wie PetaPoco immer ruft die folgende Methode der Datenbank-Klasse:
Und die
Database.Insert(tableName, pkName, poco)
macht am wenigsten Arbeit (es ist im Grunde nur ein pass-through-Methode), so würde ich davon ausgehen, es ist der mit der besten Leistung.Hier ist der code für
Insert(string, string, object)
:Wäre es wohl etwas (und unmerklich) schneller, rufen Sie die
Insert(string, string, bool, object)
überlast direkt.