libcurl вдвое медленнее, чем curl - PullRequest
0 голосов
/ 10 июля 2020

Я использую libcurl для загрузки файлов по SFTP (протоколу), libcurl требуется примерно в два раза больше, чем при использовании исполняемого файла curl.

Это пример curl При разработке я следовал:

size_t my_fwrite(char* buffer, size_t size, size_t nmemb, File* file)
{
    return size * nmemb; //Just return the size to prove that it's not the write
}

curl_global_init(CURL_GLOBAL_DEFAULT);
CURL* curl = curl_easy_init();

/** Setup URL/PORT/USERNAME/PASSWORD*/

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_fwrite);
CURLcode res = curl_easy_perform(curl);
if (CURLE_OK != res) {
    // we failed
    std::cout << "we failed due to '" << curl_easy_strerror(res) << "'\n";
}
// Close the file
curl_global_cleanup();

Во время работы я измерил время с помощью chrono stable_clock, и он использовал около 39 секунд для загрузки 119 МБ. Тогда как использование команды curl заняло 16 секунд. Я пробовал и с лагер-файлами, и применил то же самое. При загрузке 500 МБ libcurl использовал около 3 минут, а curl - 1,5 минуты. Бинарный файл curl и API компилируются с использованием CMake.

Команда curl была: curl -k sftp://username:password@host.com:port/path/to/file.zip --output file.zip

Обратите внимание, что я использовал скомпилированный curl, а не загруженный системой curl, как это было не поддерживает sftp

EDIT : скомпилирован как релиз. Запуск очень сонного профилировщика на исполняемом файле отладочной компиляции дал мне, что большая часть времени была потрачена на Curl_multi_wait screeshot

Флаги CMAKE:

set(CMAKE_USE_LIBSSH2 ON) 
set(CURL_ZLIB ON) 
set(CMAKE_USE_OPENSSL ON) 
set(BUILD_CURL_EXE ON) 
set(CURL_STATICLIB ON)

EDIT2: Я скомпилировал свой код как на Ubuntu, так и на Windows (G CC 10.1.0 и VS 2019 16.6.3), и оба они страдают от той же проблемы, что использование Libcurl в два раза медленнее, чем используя бинарный файл Curl, который я компилирую.

...