【问题标题】:ASP.NET MVC Displaying Multiple Images from Database. How to- EfficientlyASP.NET MVC 显示来自数据库的多个图像。如何 - 有效地
【发布时间】:2012-03-21 02:51:08
【问题描述】:

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

我看到几个例子,比如:

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

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

【问题讨论】:

  • 图片总是全部显示吗?如果是这样,则进行一次调用并将结果转储到一个集合中,然后循环浏览该集合以在页面上显示。

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


【解决方案1】:

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

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

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

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

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

【讨论】:

  • +1 是为了你的可耻录取 :)
  • 聪明人从错误中吸取教训。聪明的人从别人的错误中学习。聪明点!
  • 好的判断来自于经验,而经验来自于不好的判断——touche!!。周末愉快!!
  • 谢谢@Stilgar。尽管我仍然认为有更好的方法,但确实我还没有缩放问题,而且它是一个简单的应用程序,还不值得实现缓存。如果我确实做到了这一点,我可以重新考虑一下,也许可以将图像从数据库中取出,或者按照其他人的建议添加缓存。
  • 您可以在以后轻松添加缓存,而无需更改其余代码。只需尝试从缓存中加载图像,如果不存在则从数据库中加载它。但这真的不值得。客户端缓存无限重要。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 根据负载分布和项目的数量,这可能会导致缓存污染,这反过来又会使缓存对其他所有内容变慢,并且会消耗大量 RAM。当然,如果很多用户请求的图像很少,这将是一个很好的解决方案,但如果少数用户请求的图像很多,它就会失败。
    猜你喜欢
    • 2016-09-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多