我有一个脚本,它在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
}
运行脚本占用了大约10%的CPU(Intel i5 @ 2.5GHz),我想探索其他方法,看看它是否能够在不减少每个请求数量的情况下减少CPU负载第二个(当前速率大约是3到4个请求/秒)或者是否可以增加每秒的请求数。
我一直在关注异步请求,但是它能否给我一个上面提到的两个改进之一?
答案 0 :(得分:5)
执行HTTP请求的CPU密集程度不是很高,如果不使用10%的cpu,可以执行20多个这样的操作。什么是CPU密集型是您使用该数据。解析它(以及你正在使用解析数据做的任何事情)正占据你的大部分cpu。您应该研究处理该数据的其他方法以节省处理能力。例如,可能不是在获得数据时处理数据,而是可以保存该数据,并且每分钟一次处理所有保存的数据,并使用一些脚本。