C# ASP.NET MVC显示数据库中的多个图像。如何提高效率

C# ASP.NET MVC显示数据库中的多个图像。如何提高效率,c#,asp.net,asp.net-mvc,image,razor,C#,Asp.net,Asp.net Mvc,Image,Razor,我有一个.NETMVC应用程序,我需要在其中显示带有一些文本的图像列表。图像和文本存储在同一个表中的数据库中,并在我的简单模型中返回。我还没有弄明白的是如何显示所有这些图像,而不必为每一个图像再次点击数据库 我看到几个例子,例如: 还有其他的,但它们都会返回到数据库中获取每一张图像。这没有意义,因为可能有几十个图像,我不想在模型中已经返回了图像数据的情况下继续对数据库进行单个调用 我是ASP.NET MVC的新手,(以前也从未处理过存储在DB中的图像),我想我只是缺少了一些东西,这不会这

我有一个.NETMVC应用程序,我需要在其中显示带有一些文本的图像列表。图像和文本存储在同一个表中的数据库中,并在我的简单模型中返回。我还没有弄明白的是如何显示所有这些图像,而不必为每一个图像再次点击数据库

我看到几个例子,例如:

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


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

您可以将检索到的图像缓存在一个共享容器中(如
应用程序

当用户请求包含图像的视图时,您将检索图像并将其存储在缓存中。 然后是对图像的请求,您只需从内存中检索图像,而无需访问数据库

具体实现取决于您的具体场景,您可以限制缓存中存储的图像数量,使缓存在一段时间后自动删除数据,甚至使用另一个服务器容器(例如,
会话


无论如何-返回先前检索到的数据总是涉及服务器端的某种缓存,应该不会特别困难。您可以将检索到的图像缓存在共享容器中(如
应用程序

当用户请求包含图像的视图时,您将检索图像并将其存储在缓存中。 然后是对图像的请求,您只需从内存中检索图像,而无需访问数据库

具体实现取决于您的具体场景,您可以限制缓存中存储的图像数量,使缓存在一段时间后自动删除数据,甚至使用另一个服务器容器(例如,
会话


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

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

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

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

我现在为这种“聪明”感到羞愧,我没有告诉任何人。除非您有实际的性能问题,否则不要考虑它

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

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


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

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

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

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

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


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

图像是否始终全部显示?如果是,则拨打一个电话并将结果转储到集合中,然后循环该集合以显示在页面上。图像是否始终全部显示?如果是,则拨打一个电话并将结果转储到集合中,然后循环该集合以显示在页面上。具体取决于负载分布和项目数量这可能会导致缓存污染,这反过来会使缓存速度变慢,并消耗大量RAM。当然,如果许多用户请求的图像很少,这将是一个很好的解决方案,但如果少数用户请求的图像很多,则会失败y、 根据负载分布和项目的数量,这可能会导致缓存污染,这反过来会使缓存在其他方面的速度变慢,并会消耗大量RAM。当然,如果许多用户请求的图像很少,这将是一个很好的解决方案,但如果少数用户请求的图像较多,则可能会出现问题I’我会惨败的