代码之家  ›  专栏  ›  技术社区  ›  James Cadd

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

  •  1
  • James Cadd  · 技术社区  · 16 年前

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

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

    2. 在服务器上创建一个httpmodule,该模块查找类似/images/1.jpg的请求,然后读取数据库并返回请求的数据。在客户端,我可以有许多图像对象,它们的源代码指向服务器上的虚拟URL。我的理论是,通过给Silverlight提供许多URL来处理它,可能比选项1中的代码更有效地传输图像。

    这两种方法中的哪一种更有效,还是有其他的方法来完成这项工作?谢谢!

    3 回复  |  直到 16 年前
        1
  •  2
  •   donnovan9    16 年前

    我不知道它是否更高效,但我已经使用HTTP处理程序(ASHX)完成了一个非常类似的任务。处理程序根据uri(image id)中的参数从数据库中拉入图像,然后Silverlight通过将图像控件的源属性设置为具有查询字符串中所需的特定ID的处理程序的uri来异步提取图像。反过来,图像控件位于一个itemsControl的内部,它允许我显示多个图像。

        2
  •  0
  •   Brian Genisio    16 年前

    我们正在做一些非常类似的事情,我们只是使用一个ASPX页面,用一个图像标识符的查询参数为它们提供服务器。我们也在缓存图像,并且ASPX页将使用缓存值(如果存在)。如果没有,我们从数据存储中提取它,缓存它,然后发送它。它对我们非常有效。

        3
  •  0
  •   Jon Galloway    16 年前

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

    实例: