© best_vector/Shutterstock.com
Kolumne: .NETversum

Tipps und Tricks rund um .NET und Visual Studio


Speicheroperationen optimieren

Beim Entity Framework ist die neuere Basisklasse DbContext deutlich langsamer als der ältere ObjectContext – insbesondere beim Anfügen von Datensätzen. Der Grund für den Leistungsverlust ist zunächst einmal pauschal erklärbar: Die Klasse DbContext ist ein Wrapper um die Klasse ObjectContext. Dies beweist auch ein Blick in den Quellcode des Entity Frameworks. Ein Wrapper ist nun immer etwas langsamer als seine Innereien.

Man kann die Anfügeoperationen beim DbContext aber deutlich beschleunigen. Dafür schaltet man die Funktion Auto Detect Changes aus mit der Zeile context.Configuration.AutoDetectChangesEnabled = false;. Der DbContext verwendet für das Change Tracking entweder Proxy-Klassen oder Snapshot-Tracking. Ein sich um das Entitätsobjekt legender .NET Runtime Proxy wird automatisch eingesetzt, wenn alle Properties der Entitätsklasse mit virtual deklariert sind. Ist das nicht der Fall, verwendet das Entity Framework Snapshot Tracking. Dabei hält der Change Tracker eine Kopie des Ausgangszustands eines jeden Objekts. Das Entity Framework vergleicht in der aufwendigen Operation DetectChanges() das alte Objekt mit dem aktuellen, um die Veränderungen zu erkennen.

DetectChanges() findet aber nicht nur vor SaveChanges() statt, sondern wird auch bei vielen anderen Methoden des Entity Framework-API aufgerufen, z. B. bei Find(), Local, Remove(), Add(), Attach(), GetValidationErrors(), Entry(), Entries().

entwicklerpress_dotnet_praxis.tif_fmt1.jpg

Buchempfehlung

.NET-Praxis. Tipps und Tricks für .NET und Visual Studio

Dr. Holger Schwichtenberg, Manfred Steyer

In den vergangenen Jahren haben Dr. Holger Schwichtenberg und Manfred Steyer im „Windows Developer“ regelmäßig Tipps und Tricks aus ihrem Alltag als Softwareentwickler, Berater und Trainer für .NET- und webbasierte Anwendungen veröffentlicht. Das vorliegende Buch ist eine aktualisierte und deutlich erweiterte Zusammenfassung dieser Tipps und Tricks. Es umfasst sowohl das .NET Framework und seine zahlreichen Teilbibliotheken als auch die beliebte JavaScript-Bibliothek AngularJS sowie die Entwicklungsumgebung Visual Studio und ergänzende Werkzeuge.

Mehr Infos: www.entwickler-press.de/Dotnet-Praxis

Die Intention von Microsoft für den ständigen Aufruf von DetectChanges() ist gut im Quellcode dokumentiert: Man will erreichen, dass der Entwickler auch stets mit den aktuellen Objektständen arbeitet. DetectChanges() sorgt nicht nur für eine konsistente Sicht des Change Trackers, sondern auch für das Relationship Fixup zwi...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang