在asp.net中锁定缓存的最佳方法是什么?

81
我知道在某些情况下,比如长时间运行的进程中,锁定ASP.NET缓存是很重要的,以避免其他用户对该资源的后续请求再次执行长时间进程而不是命中缓存。
在C#中实现ASP.NET缓存锁定的最佳方法是什么?
11个回答

0

被接受的答案(推荐在锁外阅读)是非常糟糕的建议,自2008年以来一直在实施。如果缓存使用并发字典,则可能有效,但它本身对于读取有一个锁。

在锁外读取意味着其他线程可能会在读取过程中修改缓存。这意味着读取可能不一致。

例如,根据缓存的实现方式(可能是一个内部结构未知的字典),该项可以在缓存中检查并找到,在缓存的基础数组的某个索引处,然后另一个线程可以修改缓存,使得基础数组中的项目不再按相同顺序排列,然后从缓存实际读取的内容可能来自不同的索引/地址。

另一种情况是读取可能来自现在超出基础数组的索引(因为已删除项目),因此您可能会遇到异常。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接