【问题标题】:.NET Application Cache vs Database Cache.NET 应用程序缓存与数据库缓存
【发布时间】:2010-01-14 22:06:27
【问题描述】:

我正在构建一个从磁盘读取文件的图片库,即时创建缩略图并将它们呈现给用户。这很好用,只是处理需要一些时间。

然后我决定使用 ASP .NET 应用程序缓存来缓存处理后的图像。处理图像时,我将 byte[] 流添加到缓存中。据我所知,这是被保存到系统内存中的。这是完美的工作,页面的加载速度要快得多。

我的问题是,如果有成千上万的图像被缓存在应用程序缓存中,这会以任何方式影响服务器性能吗?

还有其他更好的方法来进行图像缓存吗?

【问题讨论】:

  • 问题的数据库缓存部分是什么?
  • 我认为将其存储在数据库中而不是应用程序缓存中可能会更有效。只是我想添加的一个想法。

标签: c# asp.net caching


【解决方案1】:

默认情况下,Application Cache 将数据存储在服务器内存中;根据您的网站导航模式,您可能不会获得太多的缓存命中。

您可以预处理所有图像以一次生成其缩略图并将其与原始图像一起存储。这样您就不需要处理该缓存层,并且可能不会占用太多磁盘空间。

【讨论】:

  • 我认为这应该是一个评论而不是一个实际的答案。
  • 当然,在加载图像时创建缩略图。这比不断创建缩略图要少得多,如果适当优化,也不会占用大量空间。
  • +1 创建缩略图。磁盘空间相对便宜,缩略图就其性质而言很小。 @Tobias - 为什么?这是一个很好的答案!
  • 谢谢大家,唯一的问题是我不能将拇指与真实图像混合,因为管理员使用图库文件夹作为管理员工具,这意味着他直接在图库文件夹中添加/删除文件。将原始图像和拇指放在同一个文件夹中会令人困惑,而且这两个图像都会显示在网站上,因为它位于同一个文件夹中。但我想我可以将拇指添加到他们自己的并行文件夹结构中。
  • 是的,创建一个现在可浏览的文件夹来存储您的缩略图,一旦上传了新图像,请在正确的文件夹中创建其缩略图
【解决方案2】:

这取决于您拥有多少图像以及服务器上的内存。我的偏好是将缩略图写入磁盘而不是将它们放入内存缓存中。您可能会从启用了 raid 的磁盘运行该站点,因此读取速度会很快,同时 IIS 针对磁盘读取进行了优化。

【讨论】:

    【解决方案3】:

    是的,将过多的内容放入缓存中肯定会影响 Web 服务器的性能。

    将缓存添加到 ASP.Net 的一个原因是添加了它的功能,如果服务器内存开始用完,则从缓存中清除最旧/最少使用的项目。如果在 Application 对象中缓存项目,则不会进行清理,服务器最终可能会耗尽内存。使用 Cache 对象将帮助您避免这种情况。

    Cache 对象还允许您设置有关过期的各种规则。因此,例如,您可以对这些图像在缓存中保留多长时间设置时间限制。

    【讨论】:

      猜你喜欢
      • 2018-06-07
      • 2012-03-26
      • 1970-01-01
      • 2012-10-04
      • 2013-04-08
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 2012-12-18
      相关资源
      最近更新 更多