当前位置:  开发笔记 > 编程语言 > 正文

锁定HttpRuntime.Cache以进行延迟加载

如何解决《锁定HttpRuntime.Cache以进行延迟加载》经验,为你挑选了2个好方法。

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



1> Darin Dimitr..:

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



2> mkchandler..:

.NET中的Cache对象是线程安全的,因此不需要锁定.参考:http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx.


仅仅因为Cache对象在多线程访问下不会被粉碎,并不意味着非原子'检查是否缓存了某些东西,如果它不是"序列不需要某种保护,则添加它.
推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有