2012-08-23 108 views
2

我有一个控制器动作,可以动态呈现给定几个输入参数的图形。由于它在图形渲染时略微明显,我使用输出缓存来避免重新渲染。控制器直接调用ASP.Net MVC OutputCache

有几十个输入参数组合非常频繁地使用。我认为这是一个好主意,温暖缓存,以便第一个访问者使用给定的那些组合不会遇到延迟。

为此,我直接调用从的Application_Start控制器()是这样的:

UtilController uc = new UtilController(); 
uc.GenerateImage(p1, p2, p3); 

通过设置断点,我看到的是,控制器动作被调用并生成图像。但是,浏览器请求图像的第一个(也是唯一的一次)时间,它会再次生成。为了进行此测试,浏览器配置为不缓存任何内容,并仔细比较用于调用控制器操作的参数。

当直接调用控制器动作时,输出缓存是否被调用?预热缓存有没有更好的方法(希望是一个独立的Web项目)?

回答

2

是否在直接调用控制器操作时不调用输出缓存?

它不会被调用,因为您没有经历触发它的HTTP请求/响应循环。你直接调用恰好是你的行为的方法。

预热缓存有没有更好的方法(希望网页 项目自成一体)?

您可以使用WebClient将HTTP请求发送到给定的地址。只有当你配置缓存存储在服务器上时,这才会起作用。如果您将位置配置为下游或客户端,则不会有任何用处。

+0

缓存URL是否敏感?换句话说,我可以通过http:// localhost访问操作,还是必须知道外部URL? –

+0

AFAIK网址在Windows下不区分大小写。 –

+0

我的意思是,如果网站部署在'http:// somedomain.com',我可以使用WebClient加载要从'http:// localhost'缓存的资源吗? –