我需要尽快发送大量的网络请求,每天要花费数小时.什么是最有效的方法?

And*_*elt 1 .net c# asynchronous http httprequest

我有一个脚本,它在while循环中执行了很多HttpRequsts,如下所示.它在BackgroundWorker中运行.

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
}
Run Code Online (Sandbox Code Playgroud)

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

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

Eri*_*ric 5

执行HTTP请求不是CPU密集型的,您可以在不使用10%的CPU的情况下执行20多个这样的请求.什么是CPU密集型是您使用该数据.解析它(以及你正在使用解析数据做的任何事情)正占据你的大部分cpu.您应该研究处理该数据的其他方法以节省处理能力.例如,可能不是在获取数据时处理数据,而是可以保存该数据,并且每分钟一次处理所有已保存数据的脚本.