我希望在 WCF 服务的请求级别实现缓存。对此服务的每个请求都会执行大量数据库调用。考虑多个数据收集器。我们需要允许一个数据收集器访问前一个数据收集器已经检索到的信息。
我希望通过为每个请求创建一个特定实例来使用新的 .Net 4.0 内存缓存。
这是个好主意吗?或者我应该简单地使用 Dictionary 对象?
顺便说一句:数据收集将是并行的,因此锁定会更加复杂,但我也可以使用并发收集。
如果您不需要某种过期逻辑,我建议使用并发集合。您可以轻松地结合 ConcurrentDictionary
和
Lazy
类来实现 单条目缓存机制。这是关于 Lazy 和 ConcurrentDictionary 组合的另一个链接。
如果您需要让您的项目过期,那么您最好使用内置的 MemoryCache 并实现双重检查锁定模式以保证缓存项目的单次检索。可以在正确使用 .NET MemoryCache 的锁定模式
中找到双重检查锁定的现成实现