我有一些动态生成图像的ASP.NET MVC动作(虽然它同样可以是一个ASPX页面)。
我正在使用[OutputCache]来缓存这些图像。我只是想知道是否需要担心ASP.NET缓存内存中的图像并占用太多资源。这些是不同尺寸的产品图片,适用于仅包含十几种产品的购物车。
OutputCache会使用磁盘还是只在内存中?它有多聪明?或者我应该自己将图像保存到磁盘并实现我自己的缓存系统(实际上是当前的实现)?
答案 0 :(得分:3)
出于所有意图和目的,我认为输出缓存完全在内存中 - 这意味着如果应用程序池被回收,则需要再次生成图像。
过去我必须做类似的事情,实际上我实现了一个主要使用HTTP缓存的双层系统,并使用文件系统作为后备。如果不存在某些内容,我会生成图像并将其保存到磁盘并将其放入缓存中。这样,如果它被推出缓存或应用程序池回收,我只需要将它从磁盘上加载(看起来你已经完成了相同的工作)。
就“内存过多”而言,如果明确使用HttpContext.Cache而不是[OutputCache],则可以控制缓存中项目的优先级。然后,您可以调整应用程序池中的设置以控制它总体使用的内存量,但我不确定除此之外还有很多工作要做。一些图像* 12产品似乎并不会占用我很多记忆。
在不知道有关您的应用程序的任何其他内容的情况下,我觉得您只需使用outputcache就可以逃脱。但是,如果你需要更强大和可扩展的东西,我会使用我所描述的双层系统。但是,如果你已经实现了并且正在运行,“如果它没有破坏......”