我已经做了一个服务器,从客户端读取数据,我使用boost :: asio async_read_some读取数据,并且我已经创建了一个处理函数,并且在这里_ioService-> poll()将运行事件处理循环来执行就绪处理程序。在处理程序_handleAsyncReceive中,我取消了在receiveDataAsync中分配的buf。缓冲区大小为500 代码如下:使用boost :: asio时的高CPU和内存消耗async_read_some
bool
TCPSocket::receiveDataAsync(unsigned int bufferSize)
{
char *buf = new char[bufferSize + 1];
try
{
_tcpSocket->async_read_some(boost::asio::buffer((void*)buf, bufferSize),
boost::bind(&TCPSocket::_handleAsyncReceive,
this,
buf,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
_ioService->poll();
}
catch (std::exception& e)
{
LOG_ERROR("Error Receiving Data Asynchronously");
LOG_ERROR(e.what());
delete [] buf;
return false;
}
//we dont delete buf here as it will be deleted by callback _handleAsyncReceive
return true;
}
void
TCPSocket::_handleAsyncReceive(char *buf, const boost::system::error_code& ec, size_t size)
{
if(ec)
{
LOG_ERROR ("Error occurred while sending data Asynchronously.");
LOG_ERROR (ec.message());
}
else if (size > 0)
{
buf[size] = '\0';
LOG_DEBUG("Deleting Buffer");
emit _asyncDataReceivedSignal(QString::fromLocal8Bit(buf));
}
delete [] buf;
}
这里的问题是缓冲区以更快的速率比较释放这样的内存使用率会高以指数的速度和在某个时候,它会消耗分配所有的内存和系统都会卡住。 CPU使用率也将在90%左右。我如何减少内存和CPU消耗?