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 |