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