首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# HttpRuntime.Cache

C# HttpRuntime.Cache
EN

Stack Overflow用户
提问于 2013-03-27 16:12:00
回答 1查看 2.6K关注 0票数 0

我在Win7 64位.这是一个相当严重的问题。以下是复制它的步骤:

  1. 在Visual中创建一个新的C# Asp.Net项目(我正在使用VS 2010,不确定这是否重要)
  2. 在Default.aspx后面的代码中,将此代码添加到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,真);
  3. 添加另一个名为Test.aspx的Web表单。你可以在标记中放任何你想要的东西,这并不重要。
  4. 在Test.aspx后面的代码中,将这一行放在Page_Load方法中,并在其上设置一个断点。 字符串x= ( string )HttpRuntime.Cache"foo";
  5. 在项目属性中,确保应用程序设置为使用本地IIS Web Server运行。

当您运行项目并击中断点时,再执行一次,让它赋值x,然后x的值将为null。至少这就是我现在发生的事。我不明白为什么会发生这种情况,因为值应该仍然在缓存中。在我的实际应用程序中,我还向HttpRuntime.Cache.Insert添加了一个回调,以跟踪为什么该项不在缓存中,并且它说它已经过期了。但是如果我给它一个30分钟的绝对过期窗口,它怎么能过期呢?

有趣的是,如果您使用而不是IIS运行应用程序,则缓存中会显示该值!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-28 08:21:33

我对这样的设置没有任何问题,但你有。因此,我认为问题在您使用的DateTime.Now设置中。根据msdn:

插入对象过期并从缓存中移除的时间。要避免本地时间可能出现的问题,如从标准时间更改到夏令时,请使用UtcNow而不是Now来表示此参数值。如果使用的是绝对过期,则slidingExpiration参数必须是NoSlidingExpiration。

所以试试这个:

代码语言:javascript
复制
HttpRuntime.Cache.Insert("foo", "test", null, DateTime.UtcNow.AddMinutes(30), TimeSpan.FromMinutes(0));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15663693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档