私のアプリは、それを実行中に多くのオブジェクトを生成します。オブジェクトはデータベース クエリの結果として生成され、ORM ソリューションの一部です。これらのオブジェクトを使用するプログラムは、通常、それらを 1 つずつ要求します。
System.Runtime.Caching を使用したいのですが、特定の基準があるため、方法がわかりません。
各ユーザーは異なるデータベースにログインできます。すべてのオブジェクトに適用できます。
データベースには、複数の異なる企業プロファイルを含めることができます。ほとんどのオブジェクトに適用できます。
ほとんどのオブジェクトは多言語対応です。
一部のオブジェクトは、データベース トランザクションが有効な間だけキャッシュされ、ロールバックまたはコミット時にダンプされます。
頭に浮かぶ最初の解決策は、キャッシュ用の複雑な文字列キー (つまり、データベース + 会社 + 言語 + オブジェクトの主キー値) を生成することですが、それが正しい方法かどうかはわかりません。また、トランザクション全体のキャッシュを実装する方法もわかりません。
独自の実装を使用すれば、おそらくキャッシュをより細かく制御できるでしょう。このようなもの:
public class DatabaseCache
{
private ConcurrentDictionary<string, ClassCache> m_databases = new ConcurrentDictionary<string, ClassCache>();
public void Add(string database, string className, object item, params string[] itemKeys)
{
}
}
public class ClassCache
{
private ConcurrentDictionary<string, KeyCache> m_cache = new ConcurrentDictionary<string, KeyCache>();
public void Add(string className, object item, params string[] itemKeys)
{
}
}
public class KeyCache
{
private ConcurrentDictionary<string, object> m_cache = new ConcurrentDictionary<string, object>();
public void Add(object item, params string[] itemKeys)
{
}
}