簡體   English   中英

堆增加-卷曲HTTP請求

[英]Heap increase - Curl HTTP request

我當前正在使用CURL庫,我嘗試了一個簡單的示例,但我注意到每次發出請求時堆內存都會增加。 這是一個非常重要的問題,尤其是在您嘗試使用多線程時。

有人知道這個問題嗎?

static int Swriter(char *data, size_t size, size_t nmemb, std::string *writerData)
{
  if(writerData == NULL)
    return 0;
  writerData->append(data, size*nmemb);
  return size * nmemb;
}

static void RequestReadJson(std::string url, std::string &content)
{
    CURL *curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, Swriter);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
        curl_easy_perform(curl);
        curl_easy_cleanup(curl);
    }
}

int main(int argc, wchar_t* argv[]) {
    curl_global_init(CURL_GLOBAL_DEFAULT);
    std::string content;
    std::string url("www.google.com");

    for(int i=0;i<300;i++)
        RequestReadJson(url, content); //Heap increase

    curl_global_cleanup();
}

堆增加

堆圖

您將新下載的內容附加到舊內容,因此堆增加:

curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);

這導致:

writerData->append(data, size*nmemb);

您最好返回一個新的字符串:

static std::string RequestReadJson(std::string url)
{
    std::string content;
    CURL *curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, Swriter);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
        curl_easy_perform(curl);
        curl_easy_cleanup(curl);
    }
    return content;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM