0

単純な目的で使用する場合は、WebClient で十分です。Timeout がない場合、それを継承して GetWebRequest メソッドを簡単にオーバーライドできます。

protected override WebRequest GetWebRequest(Uri address)
{
    WebRequest request = base.GetWebRequest(address);
    request.Timeout = Timeout;
    return request;
}

マルチスレッドで使用している場合は、コードまたは app.config で MaxConnection を設定する必要があります: Improving performance of multithreaded HttpWebRequests in .NET

簡単に並列化することもできます: .net 4.0 で Web クローラーを並列化するためのベスト プラクティス

たぶん、Microsoft は WebClient (HttpWebRequest) の実装の問題のために新しい HttpClient クラスを作成しました。

ただし、Proxy、Gzip のサポートはありません。

Web クライアントの場合:

マルチスレッドの実装では、タイムアウトの設定はまだ役に立たない!

HttpWebRequest の同時実行制限

だから質問:

プロキシ、タイムアウト (動作中のもの)、gzip をサポートする FastWebClient が必要です。複数のプロキシで使用するため、複数の FastWebClient が必要です。

またはヘルパー:

FastWebHelper.DownloadString (文字列 url、WebProxy プロキシ、int タイムアウト)

何か案が ?

4

1 に答える 1

0

もちろん。WebClient.DownloadStringAsync メソッド ステートレスではないため、接続/リクエストごとに 1 つの WebClient インスタンスを作成する必要があります。

于 2012-09-10T14:26:52.057 に答える