我使用.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个数据库查询,可以返回所有内容。