46

我希望在 WCF 服务的请求级别实现缓存。对该服务的每个请求都会执行大量的数据库调用。考虑多个数据收集器。我们需要允许一个数据收集器访问前一个数据收集器已经检索到的信息。

我希望通过为每个请求创建一个特定的实例来为此使用新的 .Net 4.0 内存缓存。

这是一个好主意吗 ?还是我应该简单地使用 Dictionary 对象?

顺便说一句:数据收集将是并行的,因此锁定会更加复杂,但我也可以使用并发收集。

4

1 回答 1

57

如果您不需要某种过期逻辑,我建议您使用并发集合。您可以轻松实现单个条目缓存机制组合ConcurrentDictionaryLazy类。这是关于 Lazy 和 ConcurrentDictionary 组合的另一个链接。

如果您需要您的项目过期,那么您最好使用内置的 MemoryCache 并实现双重检查锁定模式以保证缓存项目的单次检索。可以在正确使用 .NET MemoryCache的锁定模式中找到双重检查锁定的现成实现

于 2012-09-26T06:55:51.723 回答