Подтвердить что ты не робот

Увеличивает ли HttpWebRequest или Webclient

Мне нужно ПОЛУЧИТЬ содержимое определенного URL-адреса. Это простая и простая задача, хотя я хочу как можно более эффективно.

Занимает ли WebClient или HttpWebRequest меньше памяти? Какой класс быстрее выполнит ту же задачу? Какой класс занимает меньше времени для инициализации?

4b9b3361

Ответ 1

WebClient - это всего лишь обертка вокруг HttpWebRequest. Использование WebClient возможно незначительно (порядка нескольких миллисекунд) медленнее, чем использование HttpWebRequest напрямую. Но эта "неэффективность" имеет огромные преимущества: она требует меньше кода, проще в использовании, и вы с меньшей вероятностью ошибаетесь при ее использовании. Рассмотрим, например, получение текста веб-страницы с помощью WebClient:

var client = new WebClient();
var text = client.DownloadString("http://example.com/page.html");

Сравните это с HttpWebRequest:

string text;
var request = (HttpWebRequest)WebRequest.Create("http://example.com/page.html");
using (var response = request.GetResponse())
{
    using (var reader = new StreamReader(response.GetResponseStream()))
    {
        text = reader.ReadToEnd();
    }
}

Все становится действительно интересным, если вы хотите скачать и сохранить в файл. С WebClient это просто вопрос вызова DownloadFile. С HttpWebRequest вам нужно создать цикл чтения и т.д. Количество способов сделать ошибку с помощью HttpWebRequest действительно поразительно. Я знаю, потому что я их сделал много.

Теперь рассмотрим загрузку двух разных страниц. С помощью WebClient вы можете написать:

var client = new WebClient();
var page1 = client.DownloadString(page1Url);
var page2 = client.DownloadString(page2Url);

Готово. С помощью HttpWebRequest вам придется дублировать код выше или переносить этот код в метод. Но если вы собираетесь обернуть его методом, то почему бы просто не использовать WebClient, который уже делает это для вас?

Если вы считаете, что запрос на быстрый веб-сайт, вероятно, займет порядка от 100 до 500 миллисекунд, то накладные расходы в несколько миллисекунд, которые добавляются WebClient, будут составлять не более одного разряда в процентах от общего времени.

Используйте WebClient для простых вещей. Используйте только HttpWebRequest, если вам нужен дополнительный низкоуровневый элемент управления, который он предлагает. Соображения скорости между ними не имеют значения.