Я сделал сервер, который считывает данные с клиента, и я использую boost :: asio async_read_some для чтения данных, и я сделал одну функцию обработчика и здесь _ioService-> poll() будет запускать цикл обработки событий для выполнения готовых обработчиков. В обработчике _handleAsyncReceive я освобождаю buf, который назначен в receiveDataAsync. BufferSize 500. код выглядит следующим образом:Высокое потребление процессора и памяти при использовании boost :: asio 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;
}
Здесь проблема буфера выделяется в гораздо более быстрыми темпами, по сравнению с открепление и поэтому использование памяти будет идти на высоком уровне с экспоненциальной скоростью и в какой-то момент времени он будет потреблять вся память и система будут застревать. Использование процессора также составит около 90%. Как уменьшить потребление памяти и процессора?