2014/06/24

[C#]WebClientが遅いと感じる人に

このエントリーをはてなブックマークに追加
WebClientを知って、クライアント上でのデスクトップアプリケーションとしての開発から、そこから一歩踏み出て、インターネット上のコンテンツに手が届くという、まるで荘厳な海原を眺めるかのような可能性を感じたものです)。
あれもできるし、これもできるのかもしれない、みたいな。
だけど動かしてみて、がっかりなのは、その遅さ。

もう少しなんとかならないか、と思いながら数年経過して、何とも簡単に見つかりました。

WebClientの使い方

おさらいです。
Yahoo!のトップページを拾ってくるためには、下記のコードで拾ってこれます。
ソースコード
//using System.Net;
string url = "http://www.yahoo.co.jp/";
string file = "yahoo.htm";
WebClient client = new WebClient();
client.DownloadFile(url, file);
これで拾ってこれる。
だけど遅い。数秒、ちょっとフリーズしたのかと不安に思うくらい遅いです。

速度改善の対応

DownloadFileの呼び出しの前にProxyをnullにします。これだけ。
client.Proxy = null;
ソースコード
//using System.Net;
string url = "http://www.yahoo.co.jp/";
string file = "yahoo.htm";
WebClient client = new WebClient();
client.Proxy = null;
client.DownloadFile(url, file);

どのくらい違うのか?
一応の客観的なデータとして、比較計測したものを載せます。(当方の環境です)
normal:00:00:02.7875601
normal:00:00:00.1332850
normal:00:00:00.1293451
Proxy = null:00:00:00.1428080
Proxy = null:00:00:00.1336392
Proxy = null:00:00:00.1355908
接続のため、初回遅かったのが改善されました。
本格的にネットコンテンツと同期するようなのには十分ではないでしょうけれど、簡易的に利用する分には大変便利です。