ASP.NET MVC显示数据库中的多个图像.如何-高效

本文关键字:图像 如何 高效 MVC NET 显示 数据库 ASP | 更新日期: 2023-09-27 18:26:23

我有一个.NET MVC应用程序,需要在其中显示带有一些文本的图像列表。图像和文本存储在同一个表中的数据库中,并在我的简单模型中返回。我还没有弄清楚的是,如何在不再次访问数据库的情况下显示所有这些图像。

我看到了几个例子,例如:

  • ASP.NET MVC:从数据库加载图像并在视图中显示
  • 使用asp.net MVC 2显示DB中的图像时出现问题

以及其他图像,但它们都会返回到每个图像的数据库中。这没有意义,因为可能有几十个图像,当我的模型中已经返回了图像数据时,我不想继续对数据库进行单一调用。

我是ASP.NET MVC的新手(以前也从未使用过存储在DB中的图像),我认为我只是缺少了一些东西,这不会有那么困难。如果有人解决了这个问题,我很乐意听到,我想其他人也会,基于这里已经存在的其他问题。

ASP.NET MVC显示数据库中的多个图像.如何-高效

只需多次访问数据库。我曾经认为将图像和文本一起加载到缓存中,然后在提供图像时使缓存无效是一个聪明的主意。我还必须生成随机URL,以避免不同的用户使彼此的缓存无效。我认为减少数据库查询的数量是非常聪明的。

我现在为这种"聪明"感到羞愧,我不告诉任何人。除非你有实际的表现问题,否则不要去想它。

通过设置适当的头来实现客户端缓存是很重要的。图像缓存在客户端上比缓存在服务器上更好,因为即使在服务器上缓存,如果不在客户端上缓存,仍然会受到网络传输的影响。

此外,通过主键访问数据库(我认为这就是检索图像的方式)并不是一项昂贵的操作,除非图像是2MB+,否则我也不会担心从数据库传输到web服务器。

编辑:我刚刚告诉大家我的羞愧:(

您可以在共享容器(如Application)中存储检索到的图像的缓存。

当用户要求查看包含图像的视图时,您会检索这些图像并将其存储在缓存中。然后是对图像的请求,您可以直接从内存中检索它们,而无需访问数据库。

具体的实现取决于您的特定场景,您可以限制缓存中存储的图像数量,让缓存在一段时间后自动丢弃数据,甚至使用另一个服务器容器(例如Session)。

无论如何,返回先前检索到的数据总是涉及到服务器端的某种缓存,实现起来应该不会特别困难。

我建议查看ASP.NET缓存。您可以从数据库中提取一次图像,并将其保存在缓存中。后续请求将从缓存中获取它们,直到缓存过期。