0

我在课堂上有一些逻辑问题HttpWebRequest

我使用命名空间中的HttpWebRequestSystem.Net,当我这样做时:

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

我以超额一秒的间隔得到一一响应,但我认为我的互联网连接可以更快地工作,因为接收到的数据非常小。然后我试试这个:

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%,但是我使用异步请求,我发送到服务器 5 请求而不是一个,为什么速度没有增加超过 100%?如果服务器不能同时处理来自一个 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上课的问题吗?为什么我不能用一个应用程序获得这样的速度,但有很多异步请求?

4

1 回答 1

0

我强烈怀疑您基本上受到内置连接池的限制,这将限制单个进程(或可能是 AppDomain)对给定主机发出的请求数量。如果要更改可以对单个主机发出的并发请求数,请使用<connectionManagement>app.config 中的元素。

顺便说一句using,您在使用响应时应该有一个声明,否则您没有正确处理它......这可能会导致连接池本身出现可怕的问题。

于 2013-02-06T17:29:04.753 回答