libcurl下载速度太慢

libcurl download speed too slow

本文关键字:下载速度 libcurl      更新时间:2023-10-16

我有一个使用C 的libcurl下载240 MB文件,但要这样做需要15分钟。我已经确保我的写回调尽可能快。它只是写入一个内存缓冲区,对于数据而言,它很大。当我使用curl命令从同一服务器下载同一文件时,它需要不到一分钟。当我使用浏览器下载文件时,也需要不到一分钟的时间。我是否可能错误地使用libcurl?这是我的代码的片段...

wxString postFields;
postFields += "package_name=" + packageName;
if( desiredVersion != 0 )
        postFields += wxString::Format( "&package_version=v%d", desiredVersion );
curl_easy_reset( curlHandleEasy );
curl_slist_free_all( headers );
headers = nullptr;
headers = curl_slist_append( headers, "Content-Type: application/x-www-form-urlencoded" );
headers = curl_slist_append( headers, "Accept: application/x-zip-compressed" );
url = "http://" + packageServer + ":7000/package_download";
urlData = url.c_str();
binResponse = new BinaryResponse( packageSize );
curl_easy_setopt( curlHandleEasy, CURLOPT_HTTPHEADER, headers );
curl_easy_setopt( curlHandleEasy, CURLOPT_POSTFIELDS, postFieldsData );
curl_easy_setopt( curlHandleEasy, CURLOPT_URL, urlData );
curl_easy_setopt( curlHandleEasy, CURLOPT_WRITEFUNCTION, &Response::WriteCallback );
curl_easy_setopt( curlHandleEasy, CURLOPT_WRITEDATA, binResponse );
curlCode = curl_easy_perform( curlHandleEasy );

我的请求设置有问题吗?如果我将写回调更改为一个虚拟的例程,只是声称已经写了数据,但只是将其扔掉(尽可能快),我的下载率仍然超级慢。

瓶颈在网络上可能是某种安全扫描,我正在接受浏览器和curl命令的进行?

我声称已经使用虚拟写作功能进行了测试,但实际上我没有。当我使用虚拟写功能测试时,下载速度很快。

所以我调查了为什么我的写入功能很慢,并发现我使用的是一个内存的流类,该课程类别未使用所需的缓冲尺寸初始化,因此它可以根据需要增长。缓冲液的生长可能很小,每次它生长时,它可能需要将旧缓冲区的整个内容复制到新的缓冲区中。...所以,长话短说:我很愚蠢,而写道很慢。

现在,我将内存流初始化为文件的总尺寸,因此永远不必生长。啊!解决问题。