![](dotnetdiagramimages/C1_LiveLinq_4_5_2_C1_LiveLinq_Indexing_Index`2.png)
'宣言
<System.Diagnostics.DebuggerDisplayAttribute("\{ Key = {KeySelector} \}")> Public MustInherit Class Index (Of T,TKey) Inherits Index(Of T) Implements C1.LiveLinq.Indexing.Search.IIndexScanner(Of T), C1.LiveLinq.Indexing.Search.IIndexScanner(Of T,TKey)
[System.Diagnostics.DebuggerDisplay("\{ Key = {KeySelector} \}")] public abstract class Index<T,TKey> : Index<T>, C1.LiveLinq.Indexing.Search.IIndexScanner<T>, C1.LiveLinq.Indexing.Search.IIndexScanner<T,TKey>
インデックスは、コードで 明示的に IndexCollection.Addを呼び出して作成してコレクションに追加するか、 Indexedヒントを使用することによって LINQ クエリー内で適用されます。
LINQ クエリーでは、 Indexedヒントを使用してインデックスを指定すると、インデックスによってクエリーのパフォーマンスが最適化されます。LiveLinq は、インデックスを使用してクエリーの速度を向上できるかどうかを自動的に判断するので、原則としてヒントは不要ですが、 ヒントを使用すると、 確実に最適化できます。
また、インデックスは、LINQ 構文を使用しなくても、 Index<T,TKey>クラスによって実装される C1.LiveLinq.Indexing.Search.IIndexScanner<T,TKey>インタフェースのメソッドを使用することで、コード内でプログラムから使用できます。 たとえば、 Index<T,TKey>オブジェクトで直接 Findなどのメソッドを呼び出すことができます。
インデックスが作成されるたびに トレードオフが生じることに注意する必要があります。検索速度は大幅に速くなりますが、メモリを消費し、 インデックス付きのコレクション(または項目、その要素のいずれか)が変更されるたびにオーバーヘッドが追加されます(通常はわずかです)。これは、通常、 インデックスが維持されるのがクエリーで必要な間だけであるためです。 インデックスを削除するには、 IndexCollection.Removeを使用します。
インデックスはサブインデックスを持つことができます( Subindex<T,TKey>を参照)。 サブインデックスはオプションであり、すべてのインデックスタスクで必要なわけではありませんが、コレクションのインデックスがマルチレベル(マルチフィールド)キーで作成される場合は、最適化をさらに促進し、メモリ要件を最小限に抑えるために役立ちます。 サブインデックスがある場合、インデックスはサブインデックスのツリーのルートレベルです。
System.Object
C1.LiveLinq.Indexing.IndexDefinition<T>
C1.LiveLinq.Indexing.Index<T>
C1.LiveLinq.Indexing.Index<T,TKey>