части асинхронного httpwebrequest - PullRequest
3 голосов
/ 23 августа 2010

Есть много частей, связанных с httpwebrequest, которые могут быть асинхронными.Я вспоминаю, что читал здесь вопрос на эту тему, но, похоже, больше не могу его найти.Поэтому я снова задам вопрос.Что из нижеперечисленного получает наибольшую отдачу (так сказать)?BeginRead / EndRead

Я понимаю, что BeginGetResponse должен быть связан с BeginGetRequestStream.Поэтому нет необходимости повторять этот факт.

Из проведенного мною расследования кажется, что BeginRead / EndRead могут иметь наибольший потенциал.Это стало немного шоком.Кажется, что EndGetResponse возвращается довольно быстро, и после «первого контакта» и любых реальных данных, поступающих на чтение, происходит значительная задержка.Я почти уверен, что сразу получаю некоторые заголовки, а затем долгую задержку, за которой следуют нужные мне данные.

Наверное, мой настоящий вопрос: я делаю что-то не так с BeginGetResponse или это действительно ценноигрок здесь BeginRead?

Как всегда, заранее спасибо.

1 Ответ

2 голосов
/ 24 августа 2010

EndGetResposnse (или, действительно, синхронный GetResponse) возвращается при получении начала данных.Это может быть небольшая или большая доля общего времени отклика.

При большом отклике большая часть времени будет потрачена не на ожидание какого-либо из них, а на чтение и обработку самого потока,В частности, это можно (особенно если веб-сервер отправляет фрагментированные данные) по мере поступления данных.

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

Другой - если вы создаете тип коллекции из ответа, используйте основанный на yield иенумерациюэто допускает обработку по мере поступления (очень мощная в сочетании с видом отложенного выполнения, который доступен путем передачи его на дальнейшую обработку на основе yield или с использованием подхода LINQ).Преимущество от этого может перевесить преимущества, которые можно получить, применяя асичский подход, хотя они также могут быть объединены.

...