Tipps zum Erhöhen der Leistung des .NET-Clientdatenkontexts in WCF-Datendiensten?

8

Wir haben eine neue App mit folgendem Stack entwickelt:

SQL Server 2008 R2 - & gt; Entity Framework 4.2 - & gt; WCF-Datenservice - & gt; WCF Data Services-Clientbibliothek

Dies ist alles .NET 4.0

Jetzt ist die WCF Data Services-Client-Bibliothek sehr praktisch für kleine Datenmengen und einfache Schemas / Objektdiagramme, aber sie ist ein echter Hund für komplexere Modelle. Insbesondere haben wir festgestellt, dass die DataServiceContext.Links-Sammlung etwas wie O (n ^ 2) skaliert: je mehr verwandte Objekte Sie laden und je verschachtelter Ihr Diagramm ist, desto langsamer wird es, bis das Laden der Daten länger dauert in den Kontext als es liest es von der Leitung.

Zum Beispiel haben wir eine Sammlung mit 2000 Mitgliedern und jedes Mitglied hat 4 Navigationseigenschaften. Das Ziehen der gesamten Sammlung ohne Erweiterung der Navigationseigenschaften dauert etwa 1 Sekunde. Die Erweiterung aller 4 Navigationseigenschaften dauert 5 Sekunden. Wir haben die Leistung an verschiedenen Punkten im Stack gemessen, und der Großteil der zusätzlichen Zeit wird für den Client ausgegeben, um die Daten zu sammeln.

Wir haben verschiedene Techniken implementiert, um dies für große Datensätze zu umgehen:

  1. Denormalisierung. Dies funktioniert gut für die Graphen, die wir immer erweitern. Funktioniert nicht so gut, wenn wir das Laden eines Teils des Graphen verschieben möchten.
  2. Verwandte Objekte werden separat geladen und außerhalb des Datenkontexts zusammengefügt. Das ist nur ärgerlich, aber es überwindet den Kontext. Linkprobleme.
  3. Verwenden mehrerer Datenkontexte, um die Links-Sammlung auf ein Minimum zu beschränken.
  4. Verwenden von MergeOption.NoTracking in Verbindung w / (1) & amp; (2)

Kennt jemand andere Techniken? Gibt es eine Einstellung, die beim Laden verwandter Objekte unnötigen Overhead verursachen könnte?

Manchmal scheint es, als wären wir auf halbem Weg zum Schreiben unseres eigenen benutzerdefinierten Kontextes, und ich hätte gerne eine Plausibilitätsprüfung, bevor sie noch ausgefeilter wird.

[Ja, mir ist klar, dass WCF Data Services möglicherweise das falsche Tool für den Job ist. Leider sind wir schon auf dieser Straße]

    
Peter Radocchia 03.04.2012, 17:36
quelle

0 Antworten