Frage

Gibt es IQueriable implementaions für Linq-to-Objekte, die besser als die Standard-O (n) linear Suchleistung durchführen, die Sie erhalten, wenn myEnumerable.AsQueriable () aufrufen?

Ich habe einen Blick auf http://www.codeplex.com/i4o/, die eine bessere Leistung hat, scheint aber über die Verwendung Erweiterungsmethoden auf IndexedCollection zu verlassen, anstatt zu machen IndexedColleciton IQueriable implementieren.

Ich bin daran interessiert, meine Schnittstelle zu halten IQueriable Rückkehr , wie ich nicht, dass jemand will wissen, ob sie einen Cache oder einen db schlagen.

War es hilfreich?

Lösung

Von Natur aus, jede Abfrage einer nicht indizierten Ressource (zB eine Liste oder IEnumerable) wird am besten O (n) sein, weil es durch jedes Element in der Liste zu durchlaufen hat, den Zustand zu überprüfen. Um die Leistung zu erreichen, besser als O (n), die Sie in der Indizierung der Daten in irgendeiner Form suchen.

Wie Sie erwähnt haben, möchten Sie wahrscheinlich in einer Bibliothek suchen, diese Indizes einpacken zu schaffen, vor allem, wenn Sie nur IQueryable aussetzen wollen.

Wenn Sie in einer manuellen Art und Weise interessiert waren aufzublicken Daten mit einem besseren Leistung, dann würde ich vorschlagen, auf Wörterbücher Suche nach Schlüssel effiziente Lookups zu tun, oder möglicherweise mit b-Bäumen, wenn Sie benötigen Bereichsabfragen zu tun. Hier ist eine nette MSDN Post auf Daten Strukturen, einschließlich b-Bäume, wenn Sie in der Theorie dahinter interessiert sind. Auch NGenerics könnte ein interessantes Projekt sein, zu betrachten.

Andere Tipps

Eine andere Antwort könnte sein, es durch eine im Speicher Objekt-Datenbank zu sichern wie: db4o

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top