IQueryable für Objekte mit besser als O (n) Leistung?
-
01-07-2019 - |
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
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
Sie vielleicht einen Blick auf PLINQ http haben wollen: // msdn. microsoft.com/en-us/magazine/cc163329.aspx
Eine andere Antwort könnte sein, es durch eine im Speicher Objekt-Datenbank zu sichern wie: db4o