2012-03-02 86 views
1

我有一个.NET MVC应用程序,我需要用一些文本显示图像列表。图像和文本存储在同一个表中的数据库中,并以简单模型返回。我没有想到的是如何显示所有这些图像,而无需再次为每个图像点击数据库。ASP.NET MVC显示来自数据库的多个图像。如何 - 高效

我看几个例子,如:

等人,但他们都回去于数据库的每个图像。这是没有道理的,因为可能有数十个图像,并且我不想在模型中返回图像数据时继续对数据库进行单一调用。我是新来的ASP.NET MVC,(也从来没有处理存储在数据库中的图像),我想我只是想念一些东西,而且它不能这么难。如果有人解决了这个问题,我很乐意听到它,而且我认为其他人也会这样做,根据其他问题已经在这里。

+1

始终是图像显示的所有如果是这样,然后打一个电话,并通过集合中的一个集合,然后循环转储结果显示在网页上? 。 – Brian 2012-03-02 15:41:44

回答

4

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

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

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

也通过主键击中数据库(我认为这是你如何去检索图像)不是一个昂贵的操作,除非图像是2MB +我不担心从数据库传输到Web服务器。

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

+2

+1是为您的可耻录取:) – 2012-03-02 15:58:10

+0

聪明的人从他们的错误中学习。聪明的人从别人的错误中学习。明智点吧! – Stilgar 2012-03-02 16:00:48

+0

良好的判断来自经验,而经验来自糟糕的判断 - 触动!!周末愉快!! – 2012-03-02 16:04:09

2

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

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

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

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

0

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

+0

根据负载分布和项目数量的不同,这可能会导致高速缓存污染,从而导致缓存对其他任何内容都变得更慢,并且会占用大量RAM。当然,如果许多用户请求的图像很少,是一个很好的解决方案,但如果有少量用户需要大量图片,它将会失败。 – Stilgar 2012-03-02 15:57:31

相关问题