非常に頻繁にアクセスする必要がある (静的) テーブルがあります。したがって、実行時にキャッシュします。
今のところ、DataTable を使用して情報を保存し、Select() を使用して情報を取得しています (通常、フィルタリングは 2 つまたは 3 つの列に分散しています)。しかし、これは非常に (!) 遅く、主要なボトルネックになっているようです。
したがって: DB テーブル (.Net 2.0) をキャッシュする最良の方法と、それに最も速くアクセスする方法は何ですか?
[編集1]
DataTable cache = new DataTable();
cache.Columns.Add("id", typeof(int));
cache.Columns.Add("data_id", typeof(int));
cache.Columns.Add("data", typeof(string));
cache.Columns.Add("value", typeof(float));
例えば:
DataRow[] result1 = cache.Select("id = 1 AND data_id = 2 AND data = 'some data'");
DataRow[] result2 = cache.Select("data = 'some other data'", "data desc");
[編集2]
@MichaelPerrenoud からの提案を念頭に置いて、辞書を実装することになりました。この設計は、キャッシュする必要がある DB テーブルの構造に関するものであることに注意してください。
Dictionary<string, Dictionary<NewObject, float>> cache;
class NewObject {int id; int data_id;}
このようにして、キャッシュは [キー]としてデータを持ち、[値] として新しい辞書を持ちます。そして、この後者は [キー] としてid + data-idを持ち、[値] としてvalueを持ちます。
データへのアクセスでは、このディクショナリはDataTable より~%90高速です。