CacheDependency 缓存文件,遇到未知错误

asdfa23rdadsdfa 2015-05-22 04:59:03

public static List<string[]> RemoveEmptyPorts
{
get
{
List<string[]> list = new List<string[]>();

Cache c = HttpRuntime.Cache;

if (c.Get("ports") == null)
{
CacheDependency cache = new CacheDependency(HttpContext.Current.Server.MapPath("~/wx/ports.xml"));

string file = HttpContext.Current.Server.MapPath("~/wx/ports.xml");
XmlDocument doc = new XmlDocument();
doc.Load(file);
XmlNodeList nodes = doc.SelectNodes("/thesaurus/expansion");
string[] port = null;
string[] removePort = null;
//List索引位置
int indexList = 0;
foreach (XmlNode node in nodes)
{
XmlNodeList xnl = node.SelectNodes("sub");
for (int i = 0; i < xnl.Count; i++)
{
if (i == 0)
{
//xnl.Count + 1==最后一项记录attributes="ncode"的助记码
port = new string[xnl.Count + 1];
//xnl.Count + 2=Ports 索引,Ports中的string[]索引
removePort = new string[xnl.Count + 2];
}
port[i] = xnl[i].InnerText;
if (xnl[i].Attributes["ncode"] != null
&& !string.IsNullOrEmpty(xnl[i].Attributes["ncode"].Value)
&& xnl[i].Attributes["ncode"].Value.ToLower().Equals("true"))
{
port[port.Length - 1] = xnl[i].InnerText;
}
//去除空格
removePort[i] = xnl[i].InnerText.Replace(" ", "");
if (i + 1 == xnl.Count)
{
Ports.Add(port);
//记录List索引,string[]索引
removePort[i + 1] = indexList.ToString();
removePort[i + 2] = i.ToString();
list.Add(removePort);
}
}

indexList++;
}
c.Add("ports", list, cache, Cache.NoAbsoluteExpiration, Cache.NoSlidingExpiration, CacheItemPriority.Default, null);

}
else
{
list = c["ports"] as List<string[]>;
}
return list;
}
}


我想实现的效果就是,如果xml文件未修改,则一直读取缓存读取,如果修改了xml数据,则重新读取再缓存
现在遇到的问题是长时间之后,缓存数据错乱了。
正常的是如果说我查1=得到的是A。
我说的长时间,缓存出错是查1=得到的是B。

我的缓存代码是否存在问题?
望各位指点
...全文
201 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复


这个是什么情况~~为什么刷不了依赖呢
  • 打赏
  • 举报
回复
你想知道有无效果还不简单,F5调试,Cache加载完后,在加载的代码处加断点,然后手工修改xml文件,看有没有被触发事件
asdfa23rdadsdfa 2015-05-22
  • 打赏
  • 举报
回复
引用 8 楼 lovelj2012 的回复:
[quote=引用 7 楼 zhengfujie 的回复:] 是的。从我查询的结果来看是这样。 我xml数据是从来不改的。 但这个问题我觉得很诡异啊,应该不是从结果推测错误原因。
别价从查询结果来看啊 你把缓存中的xml以日志的形式存储到磁盘,看下 别想当然:-)[/quote] 好吧。 另外请教下, 我想实现的效果,这样的缓存的代码 是否满足? 实现的效果1楼有描述
江南小鱼 2015-05-22
  • 打赏
  • 举报
回复
引用 7 楼 zhengfujie 的回复:
是的。从我查询的结果来看是这样。 我xml数据是从来不改的。 但这个问题我觉得很诡异啊,应该不是从结果推测错误原因。
别价从查询结果来看啊 你把缓存中的xml以日志的形式存储到磁盘,看下 别想当然:-)
asdfa23rdadsdfa 2015-05-22
  • 打赏
  • 举报
回复
引用 6 楼 lovelj2012 的回复:
[quote=引用 4 楼 zhengfujie 的回复:] [quote=引用 2 楼 lovelj2012 的回复:] 肉眼看不出来哪有问题。 确定下,缓存中的xml已经错乱,还是你读取bug造成的? 读取缓存的时候,把缓存中的xml用log记录下来瞧瞧
前期是正确的。 经过一段时间(现在来看,都是5,6小时之后),结果是错误的 读取的没问题。我已经调试过了。 [/quote] 就是说5、6个小时候,缓存中的xml就是错乱的了?[/quote] 是的。从我查询的结果来看是这样。 我xml数据是从来不改的。 但这个问题我觉得很诡异啊,应该不是从结果推测错误原因。
江南小鱼 2015-05-22
  • 打赏
  • 举报
回复
引用 4 楼 zhengfujie 的回复:
[quote=引用 2 楼 lovelj2012 的回复:] 肉眼看不出来哪有问题。 确定下,缓存中的xml已经错乱,还是你读取bug造成的? 读取缓存的时候,把缓存中的xml用log记录下来瞧瞧
前期是正确的。 经过一段时间(现在来看,都是5,6小时之后),结果是错误的 读取的没问题。我已经调试过了。 [/quote] 就是说5、6个小时候,缓存中的xml就是错乱的了?
asdfa23rdadsdfa 2015-05-22
  • 打赏
  • 举报
回复
我这缓存xml文件的代码是否存在问题呢?
asdfa23rdadsdfa 2015-05-22
  • 打赏
  • 举报
回复
引用 2 楼 lovelj2012 的回复:
肉眼看不出来哪有问题。 确定下,缓存中的xml已经错乱,还是你读取bug造成的? 读取缓存的时候,把缓存中的xml用log记录下来瞧瞧
前期是正确的。 经过一段时间(现在来看,都是5,6小时之后),结果是错误的 读取的没问题。我已经调试过了。
asdfa23rdadsdfa 2015-05-22
  • 打赏
  • 举报
回复
引用 1 楼 starfd 的回复:
写的好复杂,眼睛都看花了…… 查1=得到的是A。 查1=得到的是B。 这怎么查的
xml我转换为数据list<string[]> list[1] = new string[] {"A"}; list[2] = new string[] [{"B"} 缓存的是这个集合 正确的是差索引1得到A。 程序经过一段时间之后现在查1得到的是2
江南小鱼 2015-05-22
  • 打赏
  • 举报
回复
肉眼看不出来哪有问题。 确定下,缓存中的xml已经错乱,还是你读取bug造成的? 读取缓存的时候,把缓存中的xml用log记录下来瞧瞧
  • 打赏
  • 举报
回复
写的好复杂,眼睛都看花了…… 查1=得到的是A。 查1=得到的是B。 这怎么查的

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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