web-dev-qa-db-ja.com

HttpWebRequestまたはWebclientは高速ですか

特定のURLのコンテンツを取得する必要があります。これは単純で簡単な作業ですが、できるだけ効率的にしたいと思っています。

WebClientまたはHttpWebRequestはより少ないメモリを使用しますか?どのクラスが同じタスクをより速く完了しますか?初期化にかかる時間が短いクラスはどれですか?

14
niklon

WebClientHttpWebRequestの単なるラッパーです。 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つの間の速度の考慮事項は関係ありません。

33
Jim Mischel