Entity Framework Core liest Datensätze deutlich schneller als das alte Entity Framework 6.x

Mirosoft neu implementierter OR-Mapper Entity Framework Core bietet beim Lesen von Datensätzen eine deutsche bessere Performance und kommt an die Leistung eines DataReader-Objekts von ADO.NET herein.

In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen
Lesezeit: 2 Min.
Von
  • Dr. Holger Schwichtenberg

Für die Neuimplementierung des objektrelationalen Mappers Entity Framework Core war für Microsoft neben dem Streben nach Plattformunabhängigkeit ein wesentlicher Beweggrund, die Performanz gegenüber dem bisherigen ADO.NET Entity Framework zu steigern. Meine Leistungsmessungen zeigen: Die Leistungssteigerung ist (zumindest beim einfachen Lesen) von Datensätzen gelungen.

Die nachstehende Abbildung zeigt, dass Entity Framework Core 1.1 auf dem aktuellen .NET "Full" Framework 4.6.2 im No-Tracking-Modus genauso schnell ist wie ein DataReader mit manuellem Mapping (d. h. Umkopieren in .NET-Objekt: obj.x = Convert(dr["x"]) ). Beim Betrieb auf .NET Core 1.1 ist Entity Framework Core 1.1 sogar einen Hauch schneller als DataReader mit Umkopieren!

Auch im Tracking-Modus ist Entity Framework Core rascher als der Vorgänger ADO.NET Entity Framework 6.1.3 unterwegs. Hier ist die Einsparung mit 66 Prozent sogar noch größer als beim No-Tracking-Modus (40 %).

Die schnellste Messung (26 ms) stammt von einem DataReader, bei dem die Datensätze aber nicht auf Objekte abgebildet wurden.

Leistungsvergleich Entity Framework und Entity Framework Core mit DataReader und DataSet

Hinweise zum obigen Messszenario:

  • Der Datenbankserver ist ein Microsoft SQL Server 2016 (virtualisiert) auf Windows Server 2016.
  • Der Client ist ein Windows-10-Rechner.
  • Die beiden Rechner sind über ein Gigabit-Ethernet-Netzwerk verbunden.
  • Der ausgeführte Befehl ist ein einfaches SELECT ohne Joins oder Aggregatoperatoren.
  • Es wurden 10.000 Datensätze geladen.
  • Ein Datensatz umfasst 13 Spalten aus einer Tabelle.
  • Datentypen sind int, smallint, nvarchar(30), nvarchar(max), bit, timestamp.
  • Die angezeigte Wert ist jeweils der Durchschnitt aus 50 Wiederholungen.
  • Der jeweils erste Zugriff für jede Technik (Kaltstart) wurde nicht gewertet.

()