Monotouch - много вызовов службы WCF - PullRequest
0 голосов
/ 26 марта 2012

Я создаю приложение для iPhone, которое получает данные из службы WCF, которую я пишу и размещаю.Я использую MonoTouch, чтобы написать клиент для iPhone.У меня есть таблица на одном из моих экранов, которая показывает список предметов (не более 100 предметов).Каждый из элементов имеет изображение для отображения в пользовательской ячейке.Чтобы избавиться от необходимости загружать все изображения вначале, я загружаю список элементов заранее, а затем запускаю поток, вызывающий службу для получения изображения каждой ячейки в методе GetCell.Как только изображение получено, я сохраняю его в словаре и извлекаю из него в следующий раз, когда ячейка отображается для сохранения при повторном вызове службы.Это означает, что изображение загружается только при необходимости, один раз из службы, а затем из словаря.Я использую код, подобный показанному в следующей статье:

http://simon.nureality.ca/simon-says-monotouch-downloading-images-like-appstore-app-in-less-than-50-lines-with-coreanimation-transitions/

Это хорошо работает в эмуляторе, но при развертывании его на тестовом устройстве (iPhone 4 на локальномWiFi) Я сталкиваюсь с некоторыми проблемами, которые, я надеюсь, кто-то может мне помочь.

Когда я загружаю список изначально, все хорошо.Когда я прокручиваю список вниз (быстро провожу пальцем вверх), устройство довольно сильно заикается.Похоже, что звонок в службу задерживает прокрутку.Я вынул код, который рисует результирующее изображение на ячейке, чтобы исключить это из рутины, так как я догадался, что это будет преступником, но это все еще цитата отстает.Я вызываю свой метод GetImage с помощью метода ThreadPool.QueueUserWorkItem и передаю ссылку на мой пользовательский контроллер ячеек, поэтому я ожидал, что вызов будет отправлен в другой поток, затем программа должна продолжить работу, не прерывая пользовательский интерфейс,но мне интересно, вызывает ли моя передача ссылки на контроллер ячейки проблемы с его виртуальным списком?

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

Заранее благодарен за любую помощь.

Ал.

Ответы [ 2 ]

1 голос
/ 26 марта 2012

Предполагая, что статические файлы изображений будут работать для вашего случая использования, я бы посоветовал вам разместить все изображения на вашем веб-сервере и сделать их напрямую доступными в виде URL-адреса. Чтобы получить изображение, нужно перейти непосредственно к классу WebClient и обойти все накладные расходы WCF.

В качестве общей оптимизации вы можете захотеть создать службу на основе HTTP, используя что-то вроде новой ASP.NET 4 Web API инфраструктуры, которая позволяет переходить непосредственно через HTTP вместо создания службы WCF на основе мыла .

0 голосов
/ 27 марта 2012

Мы реализовали решение, которое использует http-обработчик ashx для возврата изображения на основе строки запроса по определенному URL.

Затем мы используем Загрузчик изображений Мигеля , который сортирует кэширование и т. Д.

Я не думаю, что ImageLoader из коробки поддерживает изображения из вызова WCF, но (как отметил Sixto Saez) может оказаться более эффективным, чтобы изображения передавались в виде изображений, а не в сообщениях SOAP .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...