Try the following to see if the (probably small)
reduction in memory allocation / deallocation helps (I really doubt it will help
much - I think there's something else that is causing problems, since you're
seeing some major performance problems that probably have nothing to do with the
code sample you posted):
Change:
IProtocolPacket* packet =
iter->Next();
std::vector<asio::const_buffer>
buffs(2);
buffs.push_back(asio::const_buffer(packet->GetHeader(),
packet->GetHeaderSize());
buffs.push_back(asio::const_buffer(packet->GetBody(),
packet->GetBodySize());
To:
IProtocolPacket* packet =
iter->Next();
boost::array<asio::const_buffer, 2> buffs = {
asio::buffer(packet->GetHeader(),
packet->GetHeaderSize()),
asio::buffer(packet->GetBody(), packet->GetBodySize())
};
(Warning - uncompiled and untested.)
---
Hmmm - I see something that could be suspicious: "packet" is a local
variable (short lifetime) - are the pointers obtained from packet valid (point
to good memory) until the handle_send function is called? Asio does not own the
data that the buffer objects wrap.
Otherwise, you might want to post your io_service run code to see if
there's something suspicious there.
Cliff