0

クラスに論理的な問題がありHttpWebRequestます。

名前空間のHttpWebRequestクラスを使用していますが、これを行うと:System.Net

while(true)
{
    HttpWebRequest request = WebRequest.Create("http://somesite.com/") as HttpWebRequest;
    HttpWebResponse responce = request.GetResponse() as HttpWebResponse;
}

1 秒間隔を超えて 1 つずつ応答が返されますが、受信データが非常に小さいため、インターネット接続はより速く動作すると思います。次に、これを試します:

while(true)
{
    HttpWebRequest request = WebRequest.Create("http://google.com/") as HttpWebRequest;
    HttpWebResponse response = request.BeginGetResponse(EndReceive, obj);
}

internal void EndReceive(IAsyncResult ar)
{
    obj.Response = obj.Request.EndGetResponse(ar) as HttpWebResponse;
}

そして、速度が非常にわずかに増加しますが、約10〜30%ですが、非同期リクエストを使用し、1つではなく5つのリクエストをサーバーに送信します。なぜ速度が100%以上増加しなかったのですか?サーバーが1つのIPから同時に複数のリクエストを処理できない場合は問題ありません...しかし、コードで10個のコンソールアプリを実行すると:

void SendRequest()
{
    HttpWebRequest request = WebRequest.Create("http://google.com/") as HttpWebRequest;
    HttpWebResponse responce = request.BeginGetResponse(EndReceive, obj);
}

void EndReceive(IAsyncResult ar)
{
    obj.Response = obj.Request.EndGetResponse(ar) as HttpWebResponse;
}

4~8倍くらいスピードが上がったのですが、HttpWebRequestクラスの問題でしょうか?そして、1 つのアプリケーションで多くの非同期要求を処理できないのはなぜですか?

4

1 に答える 1

0

基本的に、組み込みの接続プールによって制限されていると強く思います。これにより、単一のプロセス (または AppDomain) が特定のホストに対して行う要求の数が制限されます。1 つのホストに対して行うことができる同時要求の数を変更する場合は<connectionManagement>、app.config の要素を使用します。

余談ですがusing、応答を使用するときはステートメントが必要です。そうしないと、応答を適切に破棄していません...接続プール自体に恐ろしい問題が発生する可能性があります。

于 2013-02-06T17:29:04.753 に答える