我们有一个运行 .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。