WP7 Max HTTPWebRequests - PullRequest
       6

WP7 Max HTTPWebRequests

3 голосов
/ 09 августа 2011

Это вопрос из двух частей

1) Существует ли максимальное количество запросов HttpWebRequest, которые могут быть запущены одновременно в WP7?

Я собираюсь создать ScheduledTaskAgent для запуска PeriodicTask. Будет 2 разных вызова службы REST, первый получит список идентификаторов для записей, которые необходимо загрузить, второй сервис будет использоваться для загрузки этих записей по одному. Я не знаю, сколько записей будет у моего гостя, будет + -50.

2.) Было бы плохой идеей сделать все индивидуальные запросы на запись одновременно? (предполагая, что это возможно) или мне следует дождаться завершения запроса, прежде чем запускать другой?

Ответы [ 4 ]

5 голосов
/ 10 августа 2011

Потратив всего полторы недели на то, чтобы заставить BackgroundAgent оставаться в пределах памяти, я бы посоветовал делать их по одному.

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

Между каждым вызовом я бы предложил сделать GC.Collect(), я даже добавил бы короткий Thread.Sleep() просто для того, чтобыуверен, что у процесса есть некоторое время, чтобы привести в порядок вещи.
Еще одна вещь, которую я делаю, это отслеживание того, сколько памяти я использую, и попытка изящно завершить работу, когда я доберусь до 97 или 98%.используйте отладчик для проверки пределов памяти, так как отладочная память намного выше, и ограничения не применяются.Однако для сравнительного тестирования между версиями вашего кода отладчик выдает очень похожие результаты при последующих запусках с тем же кодом.

Вы можете отслеживать использование памяти с помощью Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage и Microsoft.Phone.Info.DeviceStatus.ApplicationMemoryUsageLimit

Я записываю журнал состояния в IsolatedStorage, чтобы я мог видеть результаты запусков на телефоне, и использую ScheduledActionService.LaunchForTest(), чтобы выключить его.Затем я использую уведомления ShellToast, чтобы сообщить мне, когда задача запускается, а также когда она завершается, чтобы я мог запустить свое приложение, чтобы прочитать журнал состояния, не прерывая его.

0 голосов
/ 10 августа 2011

Кажется, я помню (но не могу найти ссылку прямо сейчас), что максимальное количество запросов, которое ОС может сделать одновременно, равно 7. Вы должны избегать делать это много одновременно, так как это остановит другую / систему приложения от возможности делать запросы.

0 голосов
/ 10 августа 2011

1) Ваш лимит памяти в PeriodicTask или ResourceIntensiveTask составляет 5 МБ.Так что вы определенно должны тщательно контролировать свои запросы.Я не думаю, что в коде есть ограничение.

2) У вас всего 5 МБ.Поэтому, когда вы одновременно запускаете все свои запросы, они немедленно прекращаются.

3) Я думаю, вам лучше использовать ResourceIntensiveTask, потому что PeriodicTask должен запускаться только 15 секунд.

Хорошее руководство дляМногозадачность в Mango: http://blogs.infosupport.com/blogs/alexb/archive/2011/05/26/multi-tasking-in-windows-phone-7-1.aspx

0 голосов
/ 09 августа 2011

Тайлер,

Мои 2 цента здесь.

  1. Я не верю, что есть какие-то ограничения на то, как HTTPWebequests вы можете раскрутить. Однако они должны быть асинхронными, конечно, и могут обслуживаться из стека браузера. Большинство современных браузеров, включая IE9, одновременно обрабатывают более 5 доменов; но вам не гарантируется обработка запроса немедленно. Тем не менее, не имеет значения, хотите ли вы ждать в отдельном потоке, перенести свой контент в канал запросов и дождаться ответа в еще одном потоке. Этот пост ( здесь ) содержит подробное описание того, почему нам нужно это сделать.

  2. Ничего плохого в этом подходе тоже нет, ИМО. Вам просто нужно подождать, пока все запросы не будут иметь соответствующие конвейеры, а затем дождаться ответов.

Спасибо!

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