2009-04-24 34 views
1

我有一个应用程序显示图像缩略图的屏幕,每个图像大约80k,它们存储在数据库中。为了保持合理的响应时间,应用程序会在第一次启动时显示一个占位符图像,然后从服务器下载图像。我期望在屏幕上一次显示大约40张图像,这是我的批量大小。向客户提供这些图像的最佳方式是什么?我有两个选择。将图像传输到Silverlight客户端的最有效方式

  1. 创建一个将Images数据库表暴露给客户端的ADO.NET数据服务。客户端可以一次一个地异步请求图像,并在它们从服务器返回时显示它们。我已经实现了这个解决方案,它似乎工作正常;速度不是很好,我觉得我可以通过一次请求3张图像来更好地利用Http管道。

  2. 在服务器上创建一个HttpModule,查找类似/Images/1.jpg的请求,然后读取数据库并返回请求的数据。在客户端,我可以有许多Image对象的源指向服务器上的虚拟Url。我的理论是,通过只给Silverlight中的网址来对付它也许能够更有效地传输图像比我的代码选项1

要么这些方法更有效,还是有另一种技术为了完成这项工作?谢谢!

回答

2

我不知道它是否更有效率,但我使用HTTP Handler(ashx)完成了非常类似的任务。处理程序根据uri中的参数(图像ID)从数据库中提取图像,然后Silverlight通过将Image控件的Source属性设置为具有我想要的特定ID的处理程序的URI来异步获取它们查询字符串。 Image控件又是一个ItemsControl的内部,它允许我显示多个图像。

0

我们正在做一些非常相似的事情,我们只是使用ASPX页面来为它们提供图像标识符的查询参数。我们还缓存图像,如果存在,ASPX页面将使用缓存的值。如果没有,我们将它从数据存储中提取出来,缓存起来并发送出去。它对我们非常有用。

+0

是否缓存涉及aspx页面编写一些代码?这是如何运作的? – 2009-04-24 14:56:01

+0

我们做我们自己的缓存,但你可能会考虑某种缓存框架,如Velocity或MemCached – 2009-04-24 15:01:44

0

你看过使用Deep Zoom吗?这对于逐行图像加载非常有效,并且在图像完全加载时为您提供更好的用户体验。

例子:

相关问题