为什么下面这个缓存依赖有问题。

shankaipingo 2008-06-26 10:28:10
康学峰

string Key = "testKey";
string FilePath = "test.txt";
protected void Page_Load(object sender, EventArgs e)
{

FilePath = Server.MapPath(FilePath);


}

//删除Cache文件
protected void Button1_Click(object sender, EventArgs e)
{
if (File.Exists(FilePath))
{
File.Delete(FilePath);
}
ViewResult();
}

//删除Cache
protected void Button3_Click(object sender, EventArgs e)
{
if (HttpContext.Current.Cache[Key] != null)
HttpContext.Current.Cache.Remove(Key);
ViewResult();
}



//查看情况
protected void Button2_Click(object sender, EventArgs e)
{
ViewResult();
}

private void ViewResult()
{

if (File.Exists(FilePath))
{
this.Label1.Text = "File存在<br/>";
}
else
{
this.Label1.Text = "File不存在<br/>";
}
if (HttpContext.Current.Cache[Key] != null)
{
this.Label1.Text += "Cache存在<br/>值是" + HttpContext.Current.Cache[Key].ToString();
}
else
{
this.Label1.Text += "Cache不存在<br/>";
}

}


//创建关联
protected void Button4_Click(object sender, EventArgs e)
{
if (HttpContext.Current.Cache[Key] != null)
{
HttpContext.Current.Cache.Remove(Key);
}

if (!File.Exists(FilePath))
{
StreamWriter sw=File.CreateText(FilePath);
sw.WriteLine("测试测试");
sw.Close();
sw.Dispose();
}
CacheDependency cd = new CacheDependency(FilePath);
HttpContext.Current.Cache.Insert(Key, "aaa", cd);
ViewResult();
}


请先创建关联,然后再删除关联文件,立马发现,文件被删除之后,Cache居然不被马上清除。
...全文
81 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
zj_2009 2008-07-14
  • 打赏
  • 举报
回复
不信你试试,别光说不练


你不要理会就好了。 但你这样说的有点过份。
shankaipingo 2008-07-14
  • 打赏
  • 举报
回复
也对。
sp1234又神秘出现了
  • 打赏
  • 举报
回复
[Quote=引用楼主 shankaipingo 的帖子:]
if (File.Exists(FilePath))
{
File.Delete(FilePath);
}
ViewResult();
[/Quote]

File.Delete与ViewResult之间,哪有机会执行让系统执行控制代码?你至少要sleep(0)吧。
shankaipingo 2008-06-30
  • 打赏
  • 举报
回复
不信你试试,别光说不练
shankaipingo 2008-06-30
  • 打赏
  • 举报
回复
是的,,姐姐,你说对了。
shankaipingo 2008-06-27
  • 打赏
  • 举报
回复
我删除依赖文件的时候,不是有一个 ViewResult();吗。我通过这个看的呀
一品梅 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 only_endure 的回复:]
然后再删除关联文件,立马发现,文件被删除之后,Cache居然不被马上清除。
====
通过什么发现的,代码中没有体现.
[/Quote]
要想在删除cache时捕捉,你要写个委托,
CacheItemRemovedCallback oRemove = new CacheItemRemovedCallback(事件名);

事件(key,object,CacheItemRemovedReason)
{response.write("the cache has been removed,the reason is {0};cacheitemremovedreason);

}
一品梅 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 only_endure 的回复:]
然后再删除关联文件,立马发现,文件被删除之后,Cache居然不被马上清除。
====
通过什么发现的,代码中没有体现.
[/Quote]
要想在删除cache时捕捉,你要写个委托,
CacheItemRemovedCallback oRemove = new CacheItemRemovedCallback(事件名);

事件(key,object,CacheItemRemovedReason)
{response.write("the cache has been removed,the reason is {0};cacheitemremovedreason);

}
一品梅 2008-06-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 shankaipingo 的回复:]
初始化 CacheDependency 类的新实例,它监视文件或目录的更改情况。


我发现他对程序自己引起的文件的更改。反应不敏感
[/Quote]
什么意思?难道你手工改文件,就可以看到CACHE清除的提示信息?
shankaipingo 2008-06-27
  • 打赏
  • 举报
回复
初始化 CacheDependency 类的新实例,它监视文件或目录的更改情况。


我发现他对程序自己引起的文件的更改。反应不敏感
ws_hgo 2008-06-26
  • 打赏
  • 举报
回复
看看.................
一品梅 2008-06-26
  • 打赏
  • 举报
回复
然后再删除关联文件,立马发现,文件被删除之后,Cache居然不被马上清除。
====
通过什么发现的,代码中没有体现.
一品梅 2008-06-26
  • 打赏
  • 举报
回复
你试试不删文件,把文件内容修改一下,看看有什么结果.

首先,你看那个文件夹中有那个文件吗?代码不全.
一品梅 2008-06-26
  • 打赏
  • 举报
回复
哦,看到了
CacheDependency cd = new CacheDependency(FilePath);
HttpContext.Current.Cache.Insert(Key, "aaa", cd);

你这个文件最好写成带有路径的吧
一品梅 2008-06-26
  • 打赏
  • 举报
回复
没看到你写缓存依赖啊.

62,046

社区成员

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

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

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

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