2009-03-23 5 views
4

Wir haben eine DB-Web-App entwickelt, die ständig einen SQL-Store von Objekten (etwa 80.000 davon) abfragt, die in einer Hierarchie miteinander in Beziehung stehen. (d. h. viele Objekte haben eine Eltern-ID, die sich auf ein anderes Objekt in derselben Tabelle bezieht)Können Sie LINQ mit Speicherobjekten anstelle von SQL Server-Abfragen verwenden, um die Leistung zu verbessern?

Ich habe daran gedacht, dass das Laden des gesamten Objektbaums in den Speicher und das Abfragen der Objekte mit LINQ ein besserer Ansatz ist. Die Objekte sind jeweils 1-5K

Hat jemand irgendwelche Gedanken?

Antwort

1

"LINQ" enthält LINQ zu Objekten, LINQ zu SQL, etc. Sie können sicherlich im Speicher abfragen, aber vielleicht sollten Sie warten, bis Sie eine Leistungsanalyse vor der Optimierung durchgeführt haben. Sie können die falsche Sache optimieren.

1

Ad hoc, das Laden von bis zu 250 Megabyte Daten in den Client-Speicher scheint keine so gute Idee zu sein. Wenn Sie über Speicher verfügen, können Sie LINQ to Object verwenden und die Datenbank-Roundtrips speichern.

Das Problem ist, dass Ihre Daten hierarchisch sind und Sie eine Zeile holen, untersuchen und die zugehörigen Zeilen abrufen müssen, und dies verursacht so viele Roundtrips.

Sie können Lazy Loading verwenden, um während der Laufzeit Ihres Programms mehr und mehr Zeilen im Clientspeicher abzurufen und mehr und mehr Abfragen im Arbeitsspeicher auszuführen, wenn sich das Arbeitssatz stabilisiert. Dies hilft jedoch nur, wenn auf Zeilen mehrfach und nicht nur ein- oder zweimal zugegriffen wird.

Eine andere Lösung könnte das Erstellen rekursiver Sichten oder gespeicherter Prozeduren unter Verwendung eines allgemeinen Tabellenausdrucks sein, die relevante Zeilen bis zu einer gewissen Entfernung von einer gegebenen Zeile abrufen.

Verwandte Themen