我们有一个运行 .NET 2.0 的网站,并开始使用 ASP.Net HttpRuntime.Cache 来存储频繁数据查找的结果,以减少数据库访问。
Snippet:
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 对象是线程安全的,所以你不需要锁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)