将图像传输到Silverlight客户端的最有效方法

将图像传输到Silverlight客户端的最有效方法,silverlight,image,bandwidth,Silverlight,Image,Bandwidth,我有一个显示图像缩略图屏幕的应用程序,每个图像大约80k,它们存储在数据库中。为了保持合理的响应时间,应用程序在首次启动时显示占位符图像,然后从服务器下载图像。我希望一次在屏幕上显示大约40幅图像,这就是我的批量大小。向客户提供这些图像的最佳方式是什么?我有两个选择 创建一个ADO.NET数据服务,向客户端公开Images数据库表。客户端可以异步请求图像,一次一个,并在图像从服务器返回时显示它们。我已经实现了这个解决方案,它似乎工作正常;速度不是很快,我觉得我可以通过一次请求3个图像来更好地利用

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

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

  • 在服务器上创建一个HttpModule,用于查找类似于/Images/1.jpg的请求,然后读取数据库并返回请求的数据。在客户端,我可以有许多图像对象,其源指向服务器上的虚拟URL。我的理论是,只要给Silverlight提供许多URL来处理它,就可以比选项1中的代码更有效地传输图像


  • 这两种方法中有哪一种更有效,还是有其他方法可以实现这一点?谢谢

    我们正在做一些非常类似的事情,我们只是使用一个ASPX页面来为它们提供一个图像标识符的查询参数。我们也在缓存图像,如果存在缓存值,ASPX页面将使用缓存值。如果没有,我们将其从数据存储中提取、缓存并向下发送。它对我们来说工作得非常好。

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

    您看过使用深度缩放吗?渐进式图像加载非常有效,并且在图像完全加载时为您提供更好的用户体验

    示例:

    • 场地

    缓存是否涉及在aspx页面中编写一些代码?这是怎么工作的?我们自己做缓存,但是你可以考虑一些缓存框架,比如速度或MimcAccEdEdGod!下一步我会试试看