.ASHX处理程序的完整性用于检索许多二进制图像



我使用.ashx处理程序从数据库中获取图像。我想以这种方式检索大量图像(> 1000):

    <img src='GetImage.ashx?id= <%# Eval("id") %>'/>

(为什么我这样做,您可以理解是否阅读了我以前的问题:将数据库映像绑定到.ascx中的itemTemplate)。恐怕我会倍增数据库查询(第一个查询所有ID的查询,所有其他iD都可以一个一个一个一个一个一个一个获得一个图像)会花很多时间,是吗?什么可能的解决方案?

首先,浏览器中的所有浏览器并未一起询问图像,而是一次。

第二,处理程序不使用会话,因此它不锁定另一个会话,因此可以为图像调用做一个并行过程。

我建议将其添加为浏览器的缓存,因此当它加载图像以不再次要求时。

一个例子:

context.Response.Cache.SetExpires(DateTime.Now.AddMinutes(120));
context.Response.Cache.SetMaxAge(new TimeSpan(0, 120, 0));

,但是您可以添加更具侵略性的缓存。

一个类似的问题:呼叫ASPX页面以返回图像随机慢

缓存始终是静态内容的好主意。

同样,如果图像相对较小,则可以使用DATA URI的http://css-tricks.com/data-uris/

说您有一个带有ID int的图像表,名称Varchar(64),MimeType varchar(64)和数据varbinary(max)

SELECT Name, 'data:' + MimeType + ';base64,' + cast(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:column("Data")))', 'VARCHAR(MAX)') AS DataURI
<img src='<%# Eval("DataURI") %>' alt='<%# Eval("Name") %> />

这样,您可以拥有1个数据库查询,可以返回所有内容。

最新更新