|
From: Nelson, E. - 2 <eri...@ba...> - 2010-06-01 15:36:24
|
Dean Michael Berris wrote:
> On Fri, May 28, 2010 at 12:42 AM, Nelson, Erik - 2 wrote:
>> if I call http::client.post() with a payload (body), it looks to me like
>> that body gets fully copied at least 5 times in cpp-netlib before it
>> goes down the wire if I understand correctly.
> Hmmm... That's odd. Are you just looking at the code or are you
> tracing that the message is being copied 5 times?
Tracing it (Visual Studio 2008, debug mode, apologies for any mistakes-not everything is clear to me)... if I call
http::client::post (request request_, string_type const & content_type, string_type const & body_) {
body(body_) calls impl::body_directive body(std::string body_) which makes a copy (1) in its signature
impl::body() creates a struct impl::body_directive which makes two copies, one in the constructor signature (2) and another as its private member (3)
request_ << body(body_) calls impl::body_directive operator(), which makes a copy by way of string::operator= (4)
http::client::post calls http::client::post(request_), which calls http::client::sync_request_skeleton
http::client::sync_request_skeleton calls simple_connection_policy::connection_impl::send_request, which makes a deep copy of the entire request in the function signature (5)
simple_connection_policy::connection_impl::send_request calls http_sync_connection::send_request_impl
http_sync_connection::send_request_impl calls detail::connection_helper::create_request, which makes a deep copy of the entire request in the function signature (6)
detail::connection_helper::create_request makes another copy (7) in the line 'string_type body_ = body(request_);' and another copy is streamed into request_stream (8)
so that's 8 copies inside cpp-netlib by my count, nine if you include the original body string that I passed in. Some of them might be optimized away by the compiler under some settings, but that's how it looks to me.
> Are you trying with the latest in master or with a
> previous release of the library?
Latest in master, checked out last week.
Erik
|