C# 我需要在一天的许多小时内尽可能快地发送大量的网络请求。什么是最有效的方法?

C# 我需要在一天的许多小时内尽可能快地发送大量的网络请求。什么是最有效的方法?,c#,.net,http,asynchronous,httprequest,C#,.net,Http,Asynchronous,Httprequest,我有一个脚本,它在while循环中执行很多httprequest,如下所示。它是在后台运行的 CookieContainer cookieJar = new CookieContainer(); string searchURL = "http://blablabla.com/"; bool shouldRun = true; //this is set elsewhere while (shouldRun) { HttpWebRequest request = (HttpWebReq

我有一个脚本,它在while循环中执行很多httprequest,如下所示。它是在后台运行的

CookieContainer cookieJar = new CookieContainer();
string searchURL = "http://blablabla.com/";
bool shouldRun = true; //this is set elsewhere

while (shouldRun)
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(searchURL);
    request.ContentType = "application/json";
    request.Method = "POST";
    request.ServicePoint.Expect100Continue = false;
    request.CookieContainer = cookieJar;
    request.Headers.Add("X-HTTP-Method-Override: GET");
    request.Timeout = 1000;

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    // Get the stream containing content returned by the server.
    Stream responseStream = response.GetResponseStream();
    // Open the stream using a StreamReader for easy access.
    StreamReader reader = new StreamReader(responseStream);
    // Read the content.
    string responseFromServer = reader.ReadToEnd();

    JObject o = JObject.Parse(responseFromServer);

    //Do something with the JObject
}
运行该脚本占用大约10%的CPU(Intel i5@2.5GHz),我想探索其他方法,看看它是否能够在不减少每秒请求数的情况下减少CPU负载(当前速率约为3到4个请求/秒)或者是否有可能增加每秒的请求数


我一直在研究异步请求,但是它能给我上面提到的两个改进中的一个吗?

执行HTTP请求并不是非常占用CPU,您可以在不使用10%CPU的情况下执行其中20+个请求。cpu密集型是指处理这些数据的方式。解析它(以及您对解析数据所做的任何操作)占用了您的大部分cpu。您应该研究处理这些数据的其他方法,以节省处理能力。例如,您可以保存这些数据,并用一些脚本一分钟一次处理所有保存的数据,而不是在获取数据时进行处理。

执行HTTP请求并不是非常占用CPU,您可以在不占用10%CPU的情况下完成其中20+项。cpu密集型是指处理这些数据的方式。解析它(以及您对解析数据所做的任何操作)占用了您的大部分cpu。您应该研究处理这些数据的其他方法,以节省处理能力。例如,您可以保存该数据,并用脚本一分钟一次处理所有保存的数据,而不是在获取数据时对其进行处理。

您最好使用块将
流阅读器
放入
。这将为以后的请求释放资源。安排一点拒绝服务攻击是吗?不,不是拒绝服务攻击。我需要它来监视一些数据。:-)您最好使用
块将
流阅读器
放入
中。这将为以后的请求释放资源。安排一点拒绝服务攻击是吗?不,不是拒绝服务攻击。我需要它来监视一些数据。:-)我试着在请求之后对解析进行注释,当然这确实有点帮助,但是它从10%到15%下降到了平均8%到9%,所以请求仍然占用了相当多的时间。经过进一步的调查,结果证明你是对的。我在代码中做了一些修改,现在只占cpu的1%。非常感谢你的大开眼界。我确信是http请求占用了电源。:-)很高兴它成功了。通常(也许总是?)在物理网络上处理任何事情时,它不会给cpu带来太多负载。与目标通信之间的延迟量使cpu上的任何负载都相形见绌。IPv6可能被排除在本声明之外。我尝试在请求之后对解析进行注释,当然这确实有点帮助,但它从10%到15%下降到了平均8%到9%,因此请求仍然占用了相当多的时间。经过进一步调查,结果证明您是对的。我在代码中做了一些修改,现在只占cpu的1%。非常感谢你的大开眼界。我确信是http请求占用了电源。:-)很高兴它成功了。通常(也许总是?)在物理网络上处理任何事情时,它不会给cpu带来太多负载。与目标通信之间的延迟量使cpu上的任何负载都相形见绌。IPv6可能被排除在本声明之外。