4

myEnumerable.AsQueriable() を呼び出したときに得られるデフォルトの O(n) 線形検索パフォーマンスよりも優れた linq-to-objects の IQueriable 実装はありますか?

私はhttp://www.codeplex.com/i4o/を見てきましたが、これはパフォーマンスが優れていますが、IndexedCollecitonにIQueriableを実装させるのではなく、IndexedCollectionで拡張メソッドを使用することに依存しているようです。

インターフェイスが IQueriable<T> を返すようにしておくことに熱心です。なぜなら、キャッシュにアクセスしているのかデータベースにアクセスしているのかを誰にも知られたくないからです。

4

3 に答える 3

1

plinq http://msdn.microsoft.com/en-us/magazine/cc163329.aspxをご覧ください。

于 2008-09-18T18:55:03.770 に答える
0

本質的に、インデックス付けされていないリソース(リストやIEnumerableなど)のクエリは、条件をチェックするためにリスト内のすべての項目を反復処理する必要があるため、せいぜいO(n)になります。O(n)よりも優れたパフォーマンスを実現するには、何らかの形式でデータのインデックスを作成することを検討する必要があります。

あなたが述べたように、特にIQueryableのみを公開したい場合は、これらのインデックスの作成をまとめるためにライブラリを調べたいと思うでしょう。

より優れたパフォーマンスでデータをより手動で検索する方法に興味がある場合は、キーによる効率的な検索を行うための辞書を調べるか、範囲クエリを実行する必要がある場合はbツリーを使用することをお勧めします。その背後にある理論に興味がある場合は、bツリーを含むデータ構造に関するMSDNの投稿をご覧ください。また、NGenericsは興味深いプロジェクトかもしれません。

于 2012-02-02T09:26:43.463 に答える
0

もう 1 つの答えは、 db4oのようなメモリ内オブジェクト データベースによってバックアップすることです。

于 2008-09-19T13:49:50.040 に答える