我可以使用ASP.NET';OutputCache';控件缓存图像而不影响性能?

我可以使用ASP.NET';OutputCache';控件缓存图像而不影响性能?,asp.net,outputcache,Asp.net,Outputcache,我有一些ASP.NET MVC操作可以动态生成图像(尽管它也可以是一个ASPX页面) 我正在使用[OutputCache]缓存这些图像。我只是想知道我是否需要担心ASP.NET在内存中缓存图像并占用太多资源。这些是一个只包含几十种产品的购物车的不同尺寸的产品图像 OutputCache将使用磁盘还是仅在内存中?它有多聪明?或者我应该自己将图像保存到磁盘并实现自己的缓存系统(实际上是当前的实现)?出于所有目的,我相信输出缓存完全在内存中-这意味着如果应用程序池被回收,则需要再次生成图像 我在过去也

我有一些ASP.NET MVC操作可以动态生成图像(尽管它也可以是一个ASPX页面)

我正在使用[OutputCache]缓存这些图像。我只是想知道我是否需要担心ASP.NET在内存中缓存图像并占用太多资源。这些是一个只包含几十种产品的购物车的不同尺寸的产品图像


OutputCache将使用磁盘还是仅在内存中?它有多聪明?或者我应该自己将图像保存到磁盘并实现自己的缓存系统(实际上是当前的实现)?

出于所有目的,我相信输出缓存完全在内存中-这意味着如果应用程序池被回收,则需要再次生成图像

我在过去也做过类似的事情,实际上我实现了一个两层系统,主要使用HTTP缓存,并使用文件系统作为后备。如果某个东西不存在,我生成图像并将其保存到磁盘,然后将其放入缓存。这样,如果它被推出缓存或者应用程序池被回收,我只需要从磁盘上加载它(看起来你也这么做了)

至于“内存过多”,如果显式使用HttpContext.Cache而不是[OutputCache],则可以控制缓存中项目的优先级。然后,你可以调整你的应用程序池的设置来控制它使用的内存总量,但我不确定除此之外还有很多事情要做。不过,几张图片*12个产品似乎不会占用我太多的记忆


在不了解应用程序其他任何信息的情况下,我觉得您只需使用outputcache就可以逃脱。但是,如果您需要更健壮和可扩展的系统,我会使用我描述的两层系统。不过,如果您已经实现并正在工作,“如果它没有损坏…”

现在的实现是混乱的,因为文件名是图像键、所需维度和其他参数的串联。如果我只需要一行代码,我不想花一整天的时间来编写一些聪明的缓存机制。我想我可能应该监视IIS内存使用情况来避免这种情况,但我的情况是一样的——您是否最终不得不运行自己的缓存实现?我从专用服务器提供图像服务,因此我无法从上载页面访问这些IIS实例,在尝试使缓存项无效时,我宁愿避免直接干扰文件系统。你找到解决办法了吗?第一次请求图像时,我自己把它们保存到缓存目录中,但现在我几乎停止生成动态图像,除了我不关心的小图像。此外,我们还升级到了一台8gb而不是2gb的新服务器。重读我最初的问题,如果outputcache会使用磁盘(除了通过虚拟内存),我会感到惊讶。