Sie sind hier: Weblog

Entity Framework Performance Tip #1: Ladestrategien

Foto ,
26.09.2014 12:19:00

Entity Framework unterstützt zwei Ladestrategien für benachbarte Objekte: Lazy Loading lädt benachbarte Objekte bei Bedarf nach, Eager Loading lädt benachbarte Objekte mittels Outer-Joins sofort. Daneben kann der Entwickler eine weitere Lade-Strategie verwenden, die hier als Pre-Loading bezeichnet und in einem weiteren Beitrag näher betrachtet wird.

Lazy Loading bietet sich für Fälle an, in denen die Anwendung nur die Nachbarn weniger Objekte benötigt und man nicht vorhersagen kann, welche Nachbarn das sein werden. Werden die Nachbarn sämtlicher Objekte benötigt, ergibt sich beim Einsatz von Lazy Laoding ein Problem, dass man als 1+N-Problem bezeichnet. Der Name legt nahe, dass der O/R-Mapper hier 1+N einzelne Abfragen ausführt: Eine Abfrage für die benötigten Objekte sowie für jedes der N abgefragten Objekte eine Abfrage zum Ermitteln der Nachbarn.

Dieses Problem kann durch den Einsatz von Eager Laoding und Pre-Loading umgangen werden. Während bei Eager Loading die einezelnen Daten durch einen Outer-Joins ausgekreuzt werden und sich die Ergebnismenge somit aufblähen kann, führt Pre-Loading mehrere Abfragen aus. Welche Option am besten für ein bestimmtes Szenario geeignet ist, muss der Entwickler von Fall zu Fall austarotieren.

Generell ist es jedoch wichtig, dass der Entwickler weiß, welche Strategie wann zum Einsatz kommt, sowie, dass er sich bewusst für diese Strategien entscheidet. Dabei helfen die Entity-Framework-internen Möglichkeiten zur Protokollierung der an die Datenbank gesendeten SQL-Anweisungen (context.Database.Log) und Werkzeuge, wie der EF-Profiler.