我的应用程序在执行此操作时会生成很多对象。对象是数据库查询的结果,它们是我们 ORM 解决方案的一部分。使用这些对象的程序通常会一一请求它们。
我想使用 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)
{
}
}