公告栏
  存平等心,行方便事,则天下无事。怀慈悲心,做慈悲事,则心中太平。
  转载文章请注明出处。谢谢您的尊重! 
  前两天博客被注入了,已修复,谴责无聊之人。
相 册
搜 索
ASP.NET 中 Cache 丢失的问题
  本博客程序使用过程中,查看错误日志,发现以下错误:
<ErrorItem>
  
<Date>2007-12-13 18:07:26    出错文件:http://xianfen.net/Default.aspx</Date>
  
<Message>错误信息:引发类型为“System.Web.HttpUnhandledException”的异常。    内部错误信息:未将对象引用设置到对象的实例。</Message>
</ErrorItem>
<ErrorItem>
  
<Date>2007-12-13 18:07:27    出错文件:http://xianfen.net/Default.aspx</Date>
  
<Message>错误信息:引发类型为“System.Web.HttpUnhandledException”的异常。    内部错误信息:未将对象引用设置到对象的实例。</Message>
</ErrorItem>
<ErrorItem>
  
<Date>2007-12-13 21:01:47    出错文件:http://www.xianfen.net/Category5_1.aspx?ClassID=5&amp;page=1</Date>
  
<Message>错误信息:引发类型为“System.Web.HttpUnhandledException”的异常。    内部错误信息:未将对象引用设置到对象的实例。</Message>
</ErrorItem>
<ErrorItem>
  
<Date>2007-12-14 9:21:02    出错文件:http://www.xianfen.net/Archive200712.aspx?Year=2007&amp;Month=12</Date>
  
<Message>错误信息:引发类型为“System.Web.HttpUnhandledException”的异常。    内部错误信息:未将对象引用设置到对象的实例。</Message>
</ErrorItem>
...

很多“未将对象引用设置到对象的实例。”,仔细审查每一行程序,没发现使用空对象的情况。无奈之时,在本机上随便调试,发现异常代码段之一为:
public static string BlogTitle
{
    
get
    {
        
if (HttpContext.Current.Cache["BlogTitle"] == null)
        {
            HttpContext.Current.Cache[
"BlogTitle"] = ConfigurationManager.AppSettings["BlogTitle"];
        }

        
return HttpContext.Current.Cache["BlogTitle"].ToString();  //在此抛出异常"未将对象引用设置到对象实例"
    }
}

为了提高性能,本博客系统多处使用缓存,但每次取缓存数据时都检查是否为空啊?只好 Google,发现有和我遇到一样问题的,原来缓存 Cache 在内存不足时会移除,看来虚拟空间的内存紧张到极点了,刚设置的缓存就被移除了!
将Cache用Application代替:
public static string BlogTitle
{
    
get
    {
        
if (HttpContext.Current.Application["BlogTitle"] == null)
        {
            HttpContext.Current.Application[
"BlogTitle"] = ConfigurationManager.AppSettings["BlogTitle"];
        }

        
return HttpContext.Current.Application["BlogTitle"].ToString();
    }
}

问题解决!
Lex @ 2008-10-30 11:28:01
我的网站是连没有使用缓存的页面也出现这样的情况.但其它的页面有使用缓存.这样是不是有联系的???
如果博主知道的话麻烦发Email(23448453@qq.com)给我.谢谢
发表评论请勿发表与政治有关的信息!评论须知
昵称:
网址:
验证码:
内容: