61 Stimmen

Wie lässt sich die Leistung von NHibernate am besten verbessern?

Ich habe eine Anwendung, die NHibernate als ORM verwendet, und manchmal kommt es zu Leistungsproblemen aufgrund der Art und Weise, wie die Daten von ihr abgerufen werden. Was kann man tun, um die Leistung von NHibernate zu verbessern? (Bitte beschränken Sie sich auf eine Empfehlung pro Antwort)

3voto

Eric Lathrop Punkte 1340

NHibernate erzeugt von Haus aus ziemlich schnelles SQL. Ich benutze es seit einem Jahr und musste bisher noch kein reines SQL damit schreiben. Alle meine Leistungsprobleme sind auf folgende Ursachen zurückzuführen Normalisierung und das Fehlen von Indizes.

Die einfachste Lösung besteht darin, die Ausführungspläne Ihrer Abfragen zu untersuchen und geeignete Indizes zu erstellen, insbesondere für Ihre Fremdschlüsselspalten. Wenn Sie Microsoft SQL Server verwenden, hilft Ihnen der "Database Engine Tuning Advisor" dabei sehr.

3voto

gnome26 Punkte 31

"Nur eine Empfehlung pro Antwort"? Dann würde ich mich für diese entscheiden:

Vermeiden Sie Join-Duplikate (auch kartesische Produkte genannt) aufgrund von Joins entlang zweier oder mehrerer paralleler to-many-Zuordnungen; verwenden Sie stattdessen Exists-subqueries, MultiQueries oder FetchMode "subselect".

Entnommen aus: Tipps zur Leistungsoptimierung von Hibernate

1voto

lotsoffreetime Punkte 1070

Wenn Sie nicht bereits (angemessen) mit Lazy Loading arbeiten, sollten Sie damit beginnen. Das Abrufen von Sammlungen, wenn Sie sie nicht brauchen, ist eine Verschwendung von allem.

Kapitel Verbesserung der Leistung beschreibt diese und andere Möglichkeiten zur Verbesserung der Leistung.

1voto

Richard Punkte 1806

Profiling ist der erste Schritt - selbst bei einfachen, zeitlich begrenzten Einheitstests - um herauszufinden, wo die größten Gewinne erzielt werden können

Bei Sammlungen sollten Sie die Stapelgröße einstellen, um die Anzahl der ausgegebenen Select-Anweisungen zu reduzieren - siehe Abschnitt Verbesserung der Leistung für Details

1voto

Hace Punkte 1372

Darf ich meine Antwort nur auf eine Option beschränken? In diesem Fall würde ich wählen, dass Sie den Second-Level-Cache-Mechanismus von NHibernate implementieren.

Auf diese Weise können Sie für jedes Objekt in Ihrer Mapping-Datei die Cache-Strategie festlegen. Der Second-Level-Cache hält bereits abgerufene Objekte im Speicher und macht daher keinen weiteren Roundtrip zur Datenbank. Dies ist ein enormer Leistungsschub.

Ihr Ziel ist es, die Objekte zu definieren, auf die Ihre Anwendung ständig zugreift. Dazu gehören allgemeine Einstellungen und Ähnliches.

Es gibt eine Fülle von Informationen zu nhibernate second level cache und wie man ihn implementiert.

Viel Glück :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X