1

メモリ内の小さなデータベースと考えることができるメモリ内のオブジェクトにデータを格納するプログラムがあります。LINQ to Objects を使用して、メモリ内オブジェクトに対して簡単なクエリを実行したいと考えています。インメモリ オブジェクトに使用する優先構造はありますか。このプロジェクトに取り掛かる前に読むべき良いリソースはありますか?

編集:アプリケーションの詳細は次のとおりです。

サービスとしても実行できる winforms アプリケーションです。最大で約 10,000 個のオブジェクトの状態を追跡します。各オブジェクトはかなり自己完結型であるため、多くの結合を行う必要はないと思います。サービスとして実行できるため、オブジェクトに関する情報を照会できるインターフェイスを追加しています。クエリは質問をし、オブジェクトを変更せずにグループ化します。各オブジェクトは、製品オブジェクトと言うよりも顧客オブジェクトのように見えます。

4

2 に答える 2

4

レックス、最初のいくつかの質問:

  • これはWinForms/WPFアプリですか、それともASP.NETですか?ユーザー/セッションなどごとに複製すると、メモリ内の「小さな」フットプリントが「大きな」になる可能性があるため、関連性があります。

  • 'small db'-ここで話しているのはどれくらい小さいですか?10kb、100kb、1Mb?実際、サイズは選択した構造(物理RAMなどの制限内!)ほど重要ではないと思いますが、他の回答者には役立つ可能性があります。

  • 「単純なクエリ」-オブジェクトとクエリがどのように見えるかについて、より多くの情報を提供できますか?あなたはCustomerwithを持っていますか、それとも複数を異なるsで複数に配置するName,Address,Ageことをもっと考えていますか...またはもっと複雑なものですか?ProductsSizesOrdersPayment

それからいくつかの考え:

  • オブジェクトのグラフ/ツリー/階層をフラットに保ちます(特に、クエリするプロパティ)。臨清where Customer.Zipcode = 90210はそれほど違いはないようですwhere Customer.Address.Zipcode = 90210が、ネストされたオブジェクトで複雑になるほど、フレームワークが効率的なクエリを作成するのが難しくなるように思われます。

  • クエリがどのようなものになるかを事前に知っていて、それらがアプリケーションにとって重要である場合は、Linqだけに依存するのではなく、クエリをサポートするデータ構造を「構築」する必要がありますか?例を挙げると、searcharoo.net検索エンジンはすべてのデータをオブジェクト(簡単に1〜2Mb以上にすることができます)としてメモリに保存しますが、クエリメカニズムは非常に高速ないくつかのカスタムHashtablesref )です。

あなたのコメントと言えば、メモリ内の小さなデータベースと考えてください。あなたに役立つかもしれない2つの「製品」があります。

  • インデックス付きLinqを使用すると、オブジェクトコレクションにインデックスを指定して、特定のクエリを高速化できます。これは進行中の作業ですが、ニーズに役立つ場合があります。

  • ComponentOne LiveLinqのWebサイトには、「LiveLinqは、インデックス作成やその他の最適化を使用して、メモリ内のLINQクエリを高速化する」と書かれています。よく似Indexed Linqていますが、商品になります。

HTH

于 2009-03-15T06:35:04.017 に答える
1

LINQ to POCO (Plain Old CLR Objects) を実行する方法を示す多くのリソースがあります。ここにあなたが始めるためのほんの一部があります...

MSDN の概要

簡単なサンプルコード

詳細なコード例

于 2009-03-14T11:25:31.367 に答える