我希望在WCF服务的请求级别实现缓存。对此服务的每个请求都执行大量数据库调用。想想多个数据收集器。我们需要允许一个数据收集器访问先前数据收集器已经检索的信息。
我希望通过为每个请求创建一个特定实例来使用新的.Net 4.0内存缓存。
这是个好主意吗?或者我应该只使用Dictionary对象?
BTW:数据收集将是并行的,因此锁定会更加复杂,但我也可以使用并发集合。答案 0 :(得分:33)
如果您不需要某种过期逻辑,我建议使用并发集合。您可以轻松实现single entry caching mechanism合并ConcurrentDictionary
和Lazy
类。这是关于Lazy和ConcurrentDictionary组合的another链接。
如果您的项目需要过期,那么最好使用内置的MemoryCache并实现double-checked locking pattern以保证单个检索缓存项。可以在Locking pattern for proper use of .NET MemoryCache
中找到准备好的双重检查锁定实现