2011-10-30 104 views
2

我创建了一个网站,使用经典的ASP.NET缓存:IIS和ASP.NET缓存

DataSet ds = new DataSet(); 
ds = (DataSet) Cache["MyDataSet"]; 

在ASP.NET代码,我设置了几个小时时间,但是重置IIS缓存更早。
在IIS中,我在哪里可以手动设置ASP.NET缓存的时间?

我有足够的RAM,满载缓存和工作场所我有大约1/3免费(3GBtotal,Web服务器2008R2)。

(我有重计算(几分钟),它们在高速缓存中,并在工作中我更新缓存只有一小部分)

+0

这个声明意味着什么:* IIS很早就重置缓存*?你如何得出IIS重置你的ASPNET缓存的结论?你做了哪些具体的观察,使你得出这个结论? – Cheeso

+0

您的缓存是否被清除或IIS是否回收 – Pleun

+0

什么是您的应用程序池回收时间?当应用程序池回收时,缓存通常会被清除 –

回答

2

当您添加对象到缓存中,可以指定过期策略(绝对,滑动到期)。

Cache.Insert("CacheItem", yourobject, 
    null, DateTime.Now.AddHours(3), 
    System.Web.Caching.Cache.NoSlidingExpiration); 

See here了更详细的解释。

这里的一些原因,一个对象可以从缓存中删除:

ASP.NET可以从缓存中删除数据,这些原因之一:

Because memory on the server is low, a process known as scavenging. 

Because the item in the cache has expired. 

Because the item's dependency changes. 

为了帮助您管理缓存的项目,当项目从缓存中删除时,ASP.NET可以通知您的应用程序 。

清除

清除是从缓存中删除项目时存储器 是稀少的过程。当他们没有被一些 一次访问时或当它们被添加到 缓存中的项目被标记为低优先级的项目被删除。 ASP.NET使用CacheItemPriority对象,以确定 哪些项目第一以清除。有关更多信息,请参见如何:将 项目添加到高速缓存。到期

除了清理,ASP.NET会自动从缓存中删除 的项目。

+0

我这样做了......但是IIS早些时候会重置缓存...... – Bzzz

+0

@Bzzz如果您设置优先级,服务器上的右侧滑动或绝对过期以及内存不足,对象将被保存在缓存中。如果这不会发生在您身上,您可能会遇到其他问题。 – Icarus

+0

“IIS早先重置缓存”是什么意思?有可能是IIS停顿了w3wp.exe,在这种情况下缓存消失了。但是,这不是IIS重置缓存;它是IIS停止进程。澄清你的陈述意思。 – Cheeso

0

为了测试当你的元素就会自动从缓存中删除,则可以发生这种情况时,得到通知:ASP.NET提供了CacheItemRemovedCallback代表用于这一目的。该Cache.Insert语句具有过载,所以你可以写类似

Cache.Insert(
     "CacheItem", 
     yourobject, 
     null, 
     DateTime.Now.AddHours(3), 
     System.Web.Caching.Cache.NoSlidingExpiration 
     CacheItemPriority.Default, 
     new CacheItemRemovedCallback(ObjectRemovedCallback)); 

(如果不知道我得到了100%正确的),然后有通过在业务对象ObjectRemovedCallback方法处理。检查http://msdn.microsoft.com/en-us/library/7kxdx246.aspx了解更多详情。很有可能您可以在此找到过早缓存过期的原因。