WebClient
to tylko opakowanie około HttpWebRequest
. Używanie wartości WebClient
jest potencjalnie nieznacznie większe niż przy użyciu (tylko kilka milisekund). Ale ta "nieefektywność" ma ogromne zalety: wymaga mniej kodu, jest łatwiejsza w użyciu i mniej prawdopodobne jest popełnienie błędu podczas korzystania z niej. Weźmy na przykład pobieranie tekstu strony sieci Web przy użyciu WebClient
:
var client = new WebClient();
var text = client.DownloadString("http://example.com/page.html");
Kontrast że do 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();
}
}
Robi się naprawdę interesujące, jeśli chcesz, aby pobrać i zapisać do pliku. Z WebClient
, jest to prosta sprawa z wywołaniem DownloadFile
. Z HttpWebRequest
musisz utworzyć pętlę do czytania itp. Liczba sposobów, w jakie można popełnić błąd przy użyciu HttpWebRequest
, jest naprawdę zdumiewająca. Wiem, bo zrobiłem ich dużo.
Rozważ teraz pobranie dwóch różnych stron. Za pomocą WebClient
można napisać:
var client = new WebClient();
var page1 = client.DownloadString(page1Url);
var page2 = client.DownloadString(page2Url);
Gotowe. W przypadku HttpWebRequest
konieczne będzie skopiowanie powyższego kodu lub zawijanie go w metodzie. Ale jeśli masz zamiar opakować to w metodę, to dlaczego nie po prostu użyć WebClient
, która już to robi dla ciebie?
Jeśli wziąć pod uwagę, że wniosek do szybkiej strony internetowej prawdopodobnie będzie rzędu od 100 do 500 milisekund, rzutnik niewielu milisekund że WebClient
dodaje wyniesie co najwyżej jednocyfrowy procent całkowitego czasu .
Użyj WebClient
do prostych rzeczy. Używaj tylko HttpWebRequest
, jeśli potrzebujesz dodatkowego kontrolera niskiego poziomu, który oferuje. Uwagi dotyczące prędkości między tymi dwoma są nieistotne.
"To zależy". Dlaczego nie spróbować i dowiedzieć się? Istnieją również różnice w łatwości użytkowania i możliwościach. –
@JohnSaunders to tylko kwestia, która z nich jest szybsza. Szczerze mówiąc, nie wiem, jak dokładnie zmierzyć to, o czym wspomniałem w moich pytaniach. – niklon
Jeśli nie możesz tego zmierzyć, nie musisz tego znać. Nie ma prostego pojęcia "szybszego". W najlepszym wypadku jest "szybciej w szczególnych okolicznościach". Zasadniczo, nie przedwcześnie optymalizuj. –