我们有一个运行 .NET 2.0 的网站,并且已经开始使用 ASP.Net HttpRuntime.Cache 来存储频繁数据查找的结果以减少我们的数据库访问。

片段:

lock (locker){ if (HttpRuntime.Cache[cacheKey] == null) { HttpRuntime.Cache.Insert(cacheKey, GetSomeDataToCache(), null, DateTime.Today.AddDays(1), Cache.NoSlidingExpiration); } return ((SomeData)HttpRuntime.Cache[cacheKey]).Copy();}
每当我们想查看缓存时,我们都会悲观地锁定。但是,我看到网上发布的各种博客建议您在检查缓存值后锁定,以免产生锁定开销。这似乎不对,因为检查后另一个线程可能已写入缓存。

所以最后我的问题是什么是“正确”的方法来做到这一点?我们甚至使用了正确的线程同步对象吗?我知道 ReaderWriterLockSlim() 但我们正在运行 .NET 2.0。

最佳答案

据我所知 Cache 对象是线程安全的,所以你不需要锁。

关于multithreading - 锁定 HttpRuntime.Cache 以进行延迟加载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/447705/

10-10 03:09