为什么一个缓存依赖不能应用于多个缓存项呢?

Yanbin_Q 2010-06-03 02:49:49
多个缓存项同时依赖于一个缓存依赖,实际上应该没什么逻辑问题,比如文件 "c:\\test.txt" 变动时需同时清理多个缓存项。

例如页面这样写

private static CacheDependency dependercy = new CacheDependency("c:\\test.txt");
protected void SetCacheBtn_Click(object sender, EventArgs e)
{
Cache.Insert("key1","This is the Cached Data",dependercy);
Cache.Insert("key2", "This is the Cached Data", dependercy);
}

执行的时候报错:

An attempt was made to reference a CacheDependency object from more than one Cache entry.

即使设定一个失效时间的情况下,某个缓存被移除了,原来那个缓存依赖也可能无法重用,必须重新创建一个新的 CacheDependency 实例。

Cache 是怎么记录与缓存依赖的关联关系的,如缓存被移除后,怎么移除掉 Cache 与缓存依赖之间的依赖关系。
...全文
150 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
phoebuswei 2010-06-04
  • 打赏
  • 举报
回复
你要是常用 的缓存可以把它放到Application中
这样就可以了
zhouwei7682719 2010-06-03
  • 打赏
  • 举报
回复
我是来学习的!
加油馒头 2010-06-03
  • 打赏
  • 举报
回复
是不是 static 的原因?
  • 打赏
  • 举报
回复
OutputCache是提高服务器效率的核心技术,可是它如此简单、丑陋、缺乏起码的自动化功能,实在是.......唉,不过我早在去年就决定今后弃 asp.net 而使用 silverlight 了,asp.net只是用来做web应用的快速原型,所以对那种动不动就创建控件树而尽可能先用自动化Cache顶上程序流程的笨重做法也就无所谓了。
  • 打赏
  • 举报
回复
asp.net的缓存技术多年来(5年来)几乎没有什么长进,可能是asp.net的老大的一个失误。

asp.net缺乏很关键的输出缓存自动化的机制,例如UpdatePanel应该可以自动缓存内容而不需要我们去设计什么OutputCache。

它可以在Render时去记录需要监视的内部控件ID列表,然后仅仅在下一次 PostbackData 时发觉前台提交数据有改变才去真正创建 UpdatePanel 内部的控件,并且后台代码当要修改内部控件时可以先使用一个类似 UpdatePanel1.EnsureChildControls() 的方法才创建内部控件,这就会让我们的asp.net编写起来很轻松而服务器端运行速度快至少好几倍。

可惜微软似乎这些年根本没有在输出缓存技术上投资,跟asp.net其它技术相比实在是不相称。
  • 打赏
  • 举报
回复
可能因为asp.net项目组觉得已经简单好用了吧,没有必要在性能高不了多少时去增加新的功能了吧!

其实我比较多地是使用
public CacheDependency(string[] filenames, string[] cachekeys)
这个实例化方法,即依赖Cache中的一个单元来触发。例如当我发觉“汽车板块新闻”发生变动时,只要写一句
Cache["汽车板块新闻最后更新时间"]=DateTime.Now.Ticks;
这样所有依赖于“汽车板块新闻最后更新时间”这个cachekey的 CacheDependency 就全都被触发了。
HolyPlace 2010-06-03
  • 打赏
  • 举报
回复
内置创建副本?
huangmin3956 2010-06-03
  • 打赏
  • 举报
回复
我乃防沉者: 学习 因为不懂

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧