Ответ 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
, если вам нужен дополнительный низкоуровневый элемент управления, который он предлагает. Соображения скорости между ними не имеют значения.