ASP.NET MVC从数据库显示多个图像。如何 - 有效率

时间:2012-03-02 15:38:51

标签: c# asp.net asp.net-mvc image razor

我有一个.NET MVC应用程序,我需要显示带有一些文本的图像列表。图像和文本存储在同一个表中的数据库中,并在我的简单模型中返回。我没想到的是如何显示所有这些图像,而不是为每一张图像再次访问数据库。

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

和其他人,但他们都回到每个图像的数据库。这没有任何意义,因为可能有数十个图像,当我已经在模型中返回图像数据时,我不想继续对数据库进行单次调用。

我是ASP.NET MVC的新手,(之前也从未使用存储在数据库中的图像),我认为我只是缺少一些东西,而且这不是很难。如果有人解决了这个问题,我很乐意听到它,我认为其他人也会根据已经存在的其他问题来解决这个问题。

3 个答案:

答案 0 :(得分:4)

多次点击数据库。我曾经认为将图像与文本一起加载到缓存中然后在缓存服务时使缓存无效是一个聪明的主意。我还必须生成随机URL以避免不同的用户使每个其他缓存无效。我认为减少数据库查询的数量非常聪明。

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

通过设置适当的标头来实现客户端缓存非常重要。图像在客户端上比在服务器上更好地缓存,因为即使您在服务器上缓存,如果不在客户端缓存,仍然会进行网络传输命中。

同样通过主键访问数据库(我假设这是你要检索图像的方式)并不是一项昂贵的操作,除非图像是2MB +我也不担心从数据库传输到Web服务器。

编辑:我刚刚告诉所有人我的耻辱:(

答案 1 :(得分:2)

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

当用户要求包含图像的视图时,您将检索它们并将其存储在缓存中。 然后来请求图像,你可以从内存中检索它们,而不需要访问数据库。

确切的实现取决于您的具体情况,您可以限制存储在缓存中的图像数量,使缓存在一段时间后自动删除数据,甚至使用其他服务器容器(例如Session)。

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

答案 2 :(得分:0)

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