2

在给定几个输入参数的情况下,我有一个动态呈现图形的控制器操作。由于图形渲染时会稍微显眼,因此我使用输出缓存来避免重新渲染。

有几十个非常常用的输入参数组合。我认为预热缓存是个好主意,这样第一个使用这些组合的访问者就不会遇到延迟。

为此,我直接从 Application_Start() 调用控制器,如下所示:

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

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

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

4

1 回答 1

2

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

它没有被调用,因为您没有经历触发它的 HTTP 请求/响应周期。您正在直接调用恰好是您的操作的方法。

有没有更好的预热缓存的方法(希望是一个独立于网络项目的方法)?

您可以使用 WebClient 向给定地址发送 HTTP 请求。这当然只有在您将缓存配置为存储在服务器上时才有效。如果您将位置配置为下游或客户端上,它将没有任何用处。

于 2012-08-23T05:53:10.637 回答