缓存碰到的问题,有代码
/// <summary>
/// 根据forumid获取特定版块的信息
/// </summary>
/// <param name= "forumid "> 版块ID </param>
/// <returns> 返回一个数据行 </returns>
public static DataRow GetForumInfo(string forumid)
{
DataRow dr = null;
Hashtable myht = (Hashtable)HttpContext.Current.Application[ "dh_strdrhd "];
if(myht==null)
{
myht = new Hashtable();
DataTable dt = GetForumHead() ;
for(int i=0;i <dt.Rows.Count;i++)
{
dr = dt.Rows[i];
if(false==myht.Contains(Convert.ToString(dr[ "forumid "])))
{
myht.Add(Convert.ToString(dt.Rows[i][0]),dr);
}
}
HttpContext.Current.Application[ "dh_strdrhd "] = myht;
bbs.Common.Util.WriteTxt( "根据forumid获取特定版块的信息 ");
}
dr = (DataRow)myht[forumid];
return dr;
}
我想把一些信息缓存,可是,发现1分钟后就超时了,这是怎么回事呢
------解决方案--------------------放在Application中是没有超时的概念的,
是不是你重新编译的问题?
------解决方案--------------------编译过application中的信息肯定不会存在了.
------解决方案--------------------如果不重新生成,每隔一分钟也是如此?
------解决方案--------------------请确认是不是因为编译引起的问题,如果是,就不用解决,这是正常的.
------解决方案--------------------重新生成项目相应于重启应用程序,所有 内存中的信息会丢失.这是正常的.
因为运行的时候不会出现这种情况.
所以我让你确定是不是编译引起的,
------解决方案--------------------如果不编译,过几分钟再看,数据还在不在.
------解决方案--------------------在项目中搜索一下
Application[ "dh_strdrhd "]
看看,是不是其他的地方将它释放了.
------解决方案--------------------与静态函数应该没有关系。
为什么是每隔一分钟?时间准确?那肯定就是人为的原因。
------解决方案--------------------呵呵,你自己买一台服务器,确保资源非常充足,那么几十分钟才会调用一次。
即使资源非常充足,应用程序也会有一些机会(当它被服务认为需要维护的时候)被重新启动,例如iis默认地就会定时重新启动子程序。说application中能在整个(传统意义上的)应用程序生命期保存,是个及其不严谨的说法。
web服务最初本来就是如此设计的。当可以在浏览器上访问一个页面的时候,也许提交前web服务已经重新启动了,甚至物理机器已经断电然后重新启动了,但是传统的web页面并不在乎这个,因为它的通讯和内容设计是服务端无状态的设计。iis、asp.net中许多地方都是为了提高Web服务的可靠性和吞吐率而设计的,而不是按照传统的c/s软件那样认为设计的。
如果你想避免它,配置你的web服务器,选择更好的服务器硬件,或者干脆自己写一个web服务程序(用.net写web服务器其实还是比较容易的,web服务不过是asp.net这座大厦楼下门前的一个比较粗俗的邮递员)。
------解决方案--------------------哦,我说的“web服务”不是指webService,使指 httpServer 产品。有很多个人产品可以运行asp.net的。