2010-01-14 194 views
2

我构建了一个从磁盘读取文件的图像库,随时创建缩略图并将其呈现给用户。这很好,除了处理需要一点时间。.NET应用程序高速缓存vs数据库高速缓存

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

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

还有其他更好的方法来做这个图像缓存吗?

+2

问题的数据库缓存部分是什么? – 2010-01-14 14:07:32

+0

我想也许将它存储在数据库而不是应用程序缓存中效率更高。只是我想在组合中添加一个想法。 – Martin 2010-01-14 14:18:20

回答

5

默认情况下Application Cache将数据存储在服务器内存上;取决于你的网站导航模式,也许你没有得到太多的缓存命中。

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

+0

我认为这应该是一个评论,而不是一个实际的答案。 – Tobias 2010-01-14 14:05:58

+0

当然,在图像加载时创建缩略图。这比不断创建缩略图的密集程度要低得多,如果它们进行了正确优化,则不会占用大量空间。 – cjk 2010-01-14 14:06:18

+0

+1来创建缩略图。磁盘空间相对便宜,缩略图的性质很小。 @Tobias - 为什么?这是一个很好的答案! – AdaTheDev 2010-01-14 14:11:37

1

这取决于您拥有多少图片以及服务器上的内存。我的首选是将缩略图写入磁盘,而不是将它们放在内存缓存中。您大概会从支持RAID的磁盘上运行该站点,因此读取速度将会很快,而且IIS将针对磁盘读取进行优化。

0

是的,你肯定会通过在缓存中放置太多东西来影响Web服务器的性能。

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

Cache对象还允许您设置有关到期的各种规则。因此,举例来说,您可能会将这些图像保留在缓存中的时间限制为多少。