特定のURLのコンテンツを取得する必要があります。これは単純で簡単な作業ですが、できるだけ効率的にしたいと思っています。
WebClientまたはHttpWebRequestはより少ないメモリを使用しますか?どのクラスが同じタスクをより速く完了しますか?初期化にかかる時間が短いクラスはどれですか?
WebClient
はHttpWebRequest
の単なるラッパーです。 WebClient
を使用すると、HttpWebRequest
を直接使用するよりもわずかに(数ミリ秒程度)遅くなる可能性があります。しかし、その「非効率性」には大きなメリットがあります。必要なコードが少なくて済み、使いやすく、使用時に間違いを犯す可能性が低くなります。たとえば、WebClient
を使用してWebページのテキストを取得することを検討してください。
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
を間違える方法の数は本当に驚異的です。私はそれらをたくさん作ったので、私は知っています。
次に、2つの異なるページをダウンロードすることを検討してください。 WebClient
を使用すると、次のように記述できます。
var client = new WebClient();
var page1 = client.DownloadString(page1Url);
var page2 = client.DownloadString(page2Url);
完了。 HttpWebRequest
を使用すると、上記のコードを複製するか、そのコードをメソッドでラップする必要があります。しかし、それをメソッドでラップする場合は、WebClient
を使用しないのはなぜですか?これはすでに実行されていますか?
高速なWebサイトへのリクエストにはおそらく100〜500ミリ秒のオーダーがかかると考えると、WebClient
が追加する数ミリ秒のオーバーヘッドは最大でになります。 合計時間の1桁のパーセンテージ。
簡単なことにはWebClient
を使用します。 HttpWebRequest
を使用するのは、それが提供する追加の低レベルの制御が必要な場合のみです。 2つの間の速度の考慮事項は関係ありません。