【发布时间】:2012-09-13 13:42:58
【问题描述】:
我有一个简单的“缓存”基础架构,如下所示:
Dictionary<string, object> cache = new Dictionary<string, object>();
(我在这里使用object作为值类型,但实际上它是一种更具体的类型。)
这个想法是按名称在 tis 字典中存储许多计算值(实际上是来自 SQL 数据库的结果)。我需要快速插入和检索,主要是针对单个元素。
现在使用它,我发现有时需要通过删除所有以特定字符串开头的条目来使某些条目无效。我的幼稚实现是这样的:
cache.Keys.Where(key => key.StartsWith(name)).ToList().ForEach(cache.Remove);
知道这可能不是最好的解决方案,我在 .NET Framework 中四处寻找可以让我更有效地执行此操作的数据结构。
有没有比Dictionary<> 更合适的课程?
【问题讨论】:
-
如果您使用的是 SQL Server,您是否签出了
SqlCacheDependency? msdn.microsoft.com/en-us/library/… -
您希望缓存中有多少项目?
-
@paul 数据本身最终来自SQL Server,但是我们的失效比这更复杂。
-
@Erno 我们预计缓存中有几千个项目,但更新和查找非常频繁。我会说 80% 的查找、10% 的更新和 10% 的失效。但这些都是粗略的数字,并且高度依赖于使用情况。
-
您确定需要缓存吗?根据设置,简单地查询数据库可能会更快。