Самый эффективный способ передачи изображений в клиент Silverlight - PullRequest
1 голос
/ 24 апреля 2009

У меня есть приложение, которое показывает экран миниатюр изображений, каждое изображение составляет около 80 КБ, и они хранятся в базе данных. Чтобы обеспечить разумное время отклика, приложение отображает изображение заполнителя при первом запуске, а затем загружает изображения с сервера. Я ожидаю показать около 40 изображений на экране одновременно, так что это мой размер пакета. Как лучше всего передать эти изображения клиенту? Я имею в виду два варианта.

  1. Создайте службу данных ADO.NET, которая предоставляет клиенту таблицу базы данных изображений. Клиент может асинхронно запрашивать изображения, по одному, и отображать их, когда они возвращаются с сервера. Я реализовал это решение, и оно, кажется, работает хорошо; скорость не велика, и я чувствую, что могу лучше использовать канал Http, запрашивая, возможно, 3 изображения одновременно.

  2. Создайте HttpModule на сервере, который ищет запросы, похожие на /Images/1.jpg, а затем читает базу данных и возвращает запрошенные данные. На стороне клиента у меня может быть много объектов Image, источник которых указывает на виртуальные URL-адреса на сервере. Моя теория состоит в том, что, просто предоставив Silverlight много URL-адресов для обработки, вы сможете передавать изображения более эффективно, чем мой код в варианте 1.

Будет ли какой-либо из этих методов более эффективным или есть другой метод для достижения этой цели? Спасибо!

Ответы [ 3 ]

2 голосов
/ 24 апреля 2009

Не знаю, насколько это эффективнее, но я выполнил очень похожую задачу, используя HTTP-обработчик (ashx). Обработчик извлекает изображение из базы данных на основе параметров в uri (идентификатор изображения), а затем Silverlight извлекает их асинхронно, устанавливая свойство Source элемента управления Image в URI обработчика с определенным идентификатором, который я хочу в Строка запроса. Элемент управления Image, в свою очередь, находится внутри ItemsControl, что позволяет отображать несколько изображений.

0 голосов
/ 25 апреля 2009

Вы смотрели на использование Deep Zoom? Он очень эффективен в отношении прогрессивной загрузки изображений и обеспечивает более приятный пользовательский интерфейс, когда изображения полностью загружены.

Примеры:

0 голосов
/ 24 апреля 2009

Мы делаем что-то очень похожее, и мы просто используем ASPX-страницу для сервера с параметром запроса идентификатора изображения. Мы также кэшируем изображения, и страница ASPX будет использовать кэшированное значение, если оно существует. Если нет, мы извлекаем его из хранилища данных, кэшируем и отправляем его вниз. Это работает очень хорошо для нас.

...