【问题标题】:Most efficient way to transfer images to a Silverlight client将图像传输到 Silverlight 客户端的最有效方式
【发布时间】:2023-03-10 07:30:01
【问题描述】:

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

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

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

这两种方法中的哪一种会更有效,还是有另一种技术可以完成这项工作?谢谢!

【问题讨论】:

    标签: silverlight image bandwidth


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 缓存是否涉及在aspx页面中编写一些代码?它是如何工作的?
      • 我们自己做缓存,但您可能会考虑使用某种缓存框架,例如 Velocity 或 MemCached
      【解决方案3】:

      您是否考虑过使用 Deep Zoom?渐进式图像加载非常高效,并且在图像完全加载时为您提供更好的用户体验。

      例子:

      【讨论】:

      • 好主意!我会为 v.next 试试这个
      猜你喜欢
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-29
      • 1970-01-01
      相关资源
      最近更新 更多