我在Win7 64位.这是一个相当严重的问题。以下是复制它的步骤:
Page_Load方法中
HttpRuntime.Cache.Insert("foo","test",null,DateTime.Now.AddMinutes(30),TimeSpan.FromMinutes(0));字符串p= "var retval;retval = window.showModalDialog('Test.aspx',‘dialogWidth: 100 p;滚动:否;中心:是;帮助:不;可调整大小:是;状态:否;朴实:是;’);ScriptManager.RegisterStartupScript(GetType,GetType,"openpop",p,真);Page_Load方法中,并在其上设置一个断点。
字符串x= ( string )HttpRuntime.Cache"foo";当您运行项目并击中断点时,再执行一次,让它赋值x,然后x的值将为null。至少这就是我现在发生的事。我不明白为什么会发生这种情况,因为值应该仍然在缓存中。在我的实际应用程序中,我还向HttpRuntime.Cache.Insert添加了一个回调,以跟踪为什么该项不在缓存中,并且它说它已经过期了。但是如果我给它一个30分钟的绝对过期窗口,它怎么能过期呢?
有趣的是,如果您使用而不是IIS运行应用程序,则缓存中会显示该值!
发布于 2013-03-28 08:21:33
我对这样的设置没有任何问题,但你有。因此,我认为问题在您使用的DateTime.Now设置中。根据msdn:
插入对象过期并从缓存中移除的时间。要避免本地时间可能出现的问题,如从标准时间更改到夏令时,请使用UtcNow而不是Now来表示此参数值。如果使用的是绝对过期,则slidingExpiration参数必须是NoSlidingExpiration。
所以试试这个:
HttpRuntime.Cache.Insert("foo", "test", null, DateTime.UtcNow.AddMinutes(30), TimeSpan.FromMinutes(0));https://stackoverflow.com/questions/15663693
复制相似问题