1

我有一个脚本,它在 while 循环中执行大量 HttpRequst,如下所示。它在 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
}

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

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

4

1 回答 1

5

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

于 2013-02-10T18:21:29.553 回答