2012-03-27 1 views
2

Ich muss Zeilen Zeilen in eine Datenbank einfügen, dann in einem anderen Thread diese Zeilen lesen und dann (in einem separaten Aufruf löschen Sie).Meistens performante Möglichkeit zum Schreiben, Lesen und Löschen (nicht aktualisieren) von Daten in eine SQL Server-Datenbank in .net

Normalerweise würde ich einfach Entity Framework dafür ausbrechen. Aber ich brauche das um schnell zu sein. Wirklich schnell.

Eine Zeile wäre eine bigint, bigint und eine varchar(max).

Gibt es einen schnelleren Weg, Entity Framework? Wenn ja, was ist das?

(Ich werde gegen SQL Server 2008 R2)

+1

Nichts ist schneller als ein Datenreader. Werden Sie schmutzige Lesevorgänge durchführen, da Sie mehrere Threads haben? – SQLMason

+0

FWIW, SO verwendet [Dapper] (http://code.google.com/p/dapper-dot-net/). – jrummell

Antwort

5

Dort auf der Dapper ORM Seite über diese einige gute Informationen sind.

Siehe Abschnitt Leistung der SELECT-Zuordnung über 500 Iterationen - POCO-Serialisierung und darunter. Es behandelt nur SELECTs, aber Sie können daraus bis zu einem gewissen Grad extrapolieren.

Zum Beispiel können Sie sehen, dass Entity Framework ist der schlechteste Weg zu gehen, in Bezug auf die Abfrage Geschwindigkeit.

Method        Duration Remarks 
Hand coded (using a SqlDataReader) 47ms 
Dapper ExecuteMapperQuery<Post> 49ms 
ServiceStack.OrmLite (QueryById) 50ms 
PetaPoco       52ms  Can be faster 
BLToolkit       80ms 
SubSonic CodingHorror    107ms 
NHibernate SQL      104ms 
Linq 2 SQL ExecuteQuery   181ms 
Entity framework ExecuteStoreQuery 631ms 
+0

Ich bin etwas überrascht von der EF-Dauer, aber nicht komplett geschockt. Sie bekommen "mehr für Ihr Geld", aber es ist merklich langsam. – SQLMason

5

Raw ADO.NET ist die schnellste, aber ich würde Dapper als Mikro-ORM wählen. Es ist unglaublich schnell und hilft dir sehr bei der Entwicklung.

Es ist jedoch wichtig zu wissen, dass der Hauptgrund, warum Dapper oder ähnliches am schnellsten wäre, in erster Linie wegen Ihre Kontrolle ist, können Sie sorgfältig die besten SQL-Abfragen erstellen.

Ich würde nicht die Mühe machen, viel über die Datenzugriffstechnologie zu denken, außer Sie brauchen etwas, das bringt Sie nahe an die tatsächliche SQL und erzwingen nicht zu viele Abstraktionen auf Sie. Nutzen Sie Ihre Zeit, um über die Datenbank, das Layout von Indizes, die Transaktionsverarbeitung und die Abfrageoptimierung nachzudenken. Dort finden Sie die primären Leistungssteigerungen.