特定のプロパティへのアクセスを高速化するためにインデックスを作成する必要があるC#クラスのコレクションを作成したいと考えています。キャッチは、クラスには、簡単にシリアライズ/デシリアライズされない既存のサービス/クラスへの参照が多数含まれているため、データベースでは十分ではありません。 LINQを使用してインデックス付きクラスコレクションを作成する
class ComplexTestClass
{
public MyService Service;
public Guid Id;
public ComplexObject Object;
}
、私はそうのようなコレクションを照会することができます
complexTestClassCollection.where(complexClass => complexClass.Object.Type == "TestType");
私のコレクションが増えた場合(これはかなり大規模な取得ん)、これらのLINQクエリは、恐ろしく非効率的です。いくつかのタイプのインデックスを作成して、linqクエリをすべて避けるためにプロパティのルックアップを行うことができます。
私の検索結果はLiteDBになりました。コレクションにインデックスを付ける/クエリを実行するための印象的な方法がありましたが、コレクションをシリアル化/シリアル化する必要がありました。現在のところ、MyServiceは現在シリアル化されていません。大規模な書き換え)。
明確にするために、私はLiteDBのようなより複雑なインデックス作成が必要です。クエリの例は次のようになります。上記の場合
complexTestClassCollection.where(complexClass => complexClass.Object.Type == "TestType" && complexClass.Object.ParentObject == "TestParent" && complexClass.Object.Members.Contains(4));
を、私はcomplexClass.Object.Members.Contains(4)
でOK complexClass.Object.Type == "TestType" && complexClass.Object.ParentObject == "TestParent"
が< 10個の要素まで結果セットを暗くして、インデックスを付け、そのコレクションでLINQを実行することは許容されていませんよ。
辞書を試しましたか? 'Dictionary>' –
dovid
私はあなたのオブジェクトをもう少し詳しく記述するべきだと思いますか?コレクションがかなり大きくなっているとどういう意味ですか?これらの他のサービスへの言及は何ですか?オブジェクトをロードするときに他のサービス/クラスへの接続を作成する余裕はありますか?あなたはそれをどのようにインデックス付けしたいのですか?あなたのコレクションの現在のタイプは何ですか? (リスト、配列、辞書) また、私はlinqクエリが非効率的であるとは言いません。データベースに格納する場合でも、linqを使用してデータベースへのアクセスを容易にします。 –
@lomed辞書のみのプロパティ。クラスには、私が検索する必要がある複数のプロパティがあります。 – FrankerZ