1

次のように、while ループで多くの HttpRequests を実行するスクリプトがあります。これは 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
}

スクリプトを実行すると、CPU の約 10% が使用されます (Intel i5 @ 2.5GHz)。1 秒あたりの要求数を減らさずに CPU 負荷を減らすことができるかどうかを確認するために、他のアプローチを検討したいと思います (現在レートは約 3 ~ 4 リクエスト/秒です)、または 1 秒あたりのリクエスト数を増やすことができるかどうか。

非同期リクエストを検討していますが、上記の 2 つの改善点のいずれかを得ることができますか?

4

1 に答える 1

5

HTTP リクエストの実行は、CPU をあまり消費しません。CPU の 10% を使用せずに、これらを 20 回以上実行できます。CPUを集中的に使用するのは、そのデータで何をするかです。それを解析すること(およびその解析されたデータで何をしているのか)は、CPUの大部分を占めているものです. 処理能力を節約するために、そのデータを処理する他の方法を検討する必要があります。たとえば、取得したデータを処理する代わりに、そのデータを保存し、1 分に 1 回、保存されたすべてのデータをスクリプトで一度に処理することができます。

于 2013-02-10T18:21:29.553 に答える