2013-01-09 57 views
0

我目前的操作使用OutputCacheAttribute(在System.Web.Mvc):outputcache随机删除项目?

[ChildActionOnly] 
[OutputCache(Duration = 24 * 60 * 60)] // Cache for 24 hours 
public ContentResult Render(string json, string pagePublished) 
{ 

第一页面加载后,它会缓存输出并保持。它有时会保持缓存几个小时,有时几分钟。

我在多个页面上使用此操作,所以首先我认为它可能与此有关。但我试图缓存一页,看看它是否成立,事实并非如此。我试图缓存很多页面,有时会持续几个小时。

任何人都知道什么可能是错的?

编辑:

w3wp进程使用的RAM大量的(这是由设计,而不是一个问题),还有免费的RAM(大约5GB)为它分配。我已经构建了另一个获取当前httpcontext缓存大小的操作。这相当于大约1350000字节。所以内存不应该有问题。

我也有的MemoryCache问题也随机淘汰项目

EDIT2(相当于约853万个字节):

好像它是保存在双方的MemoryCache和动作输出的HttpContext缓存。

+0

缓存是否已满?什么是驱逐政策? –

+0

我编辑了你的标题。请参阅:“[应该在其标题中包含”标签“](http://meta.stackexchange.com/questions/19190/)”,其中的共识是“不,他们不应该”。 –

+0

@DaveHillier缓存需要8 MB,所以应该有足够的空间供它使用。它应该在持续时间用尽之后驱逐输入。 – slinzerthegod

回答

0

无法保证内容将被缓存到您指定的时间量。当内存资源变低时,缓存开始自动清除内容。

+0

空闲内存不是问题。 – slinzerthegod

+0

@slinzerthegod要点是,'duration'属性不是一成不变的,将它看作是一个推荐的缓存时间。 – James

+0

如果服务器上有5GB可用内存,它应该不成问题? – slinzerthegod