mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-10 23:07:59 +00:00
Avoid unnecessary memory allocation/relocation
This commit is contained in:
parent
1f2a6455b6
commit
03d3552ee0
@ -46,6 +46,10 @@ Connection::Connection(QTcpSocket *socket, IRequestHandler *requestHandler, QObj
|
||||
{
|
||||
m_socket->setParent(this);
|
||||
|
||||
// reserve common size for requests, don't use the max allowed size which is too big for
|
||||
// memory constrained platforms
|
||||
m_receivedData.reserve(1024 * 1024);
|
||||
|
||||
// reset timer when there are activity
|
||||
m_idleTimer.start();
|
||||
connect(m_socket, &QIODevice::readyRead, this, [this]()
|
||||
@ -66,7 +70,18 @@ Connection::~Connection()
|
||||
|
||||
void Connection::read()
|
||||
{
|
||||
m_receivedData.append(m_socket->readAll());
|
||||
// reuse existing buffer and avoid unnecessary memory allocation/relocation
|
||||
const qsizetype previousSize = m_receivedData.size();
|
||||
const qint64 bytesAvailable = m_socket->bytesAvailable();
|
||||
m_receivedData.resize(previousSize + bytesAvailable);
|
||||
const qint64 bytesRead = m_socket->read((m_receivedData.data() + previousSize), bytesAvailable);
|
||||
if (Q_UNLIKELY(bytesRead < 0))
|
||||
{
|
||||
m_socket->close();
|
||||
return;
|
||||
}
|
||||
if (Q_UNLIKELY(bytesRead < bytesAvailable))
|
||||
m_receivedData.chop(bytesAvailable - bytesRead);
|
||||
|
||||
while (!m_receivedData.isEmpty())
|
||||
{
|
||||
@ -116,7 +131,7 @@ void Connection::read()
|
||||
resp.headers[HEADER_CONNECTION] = u"keep-alive"_s;
|
||||
|
||||
sendResponse(resp);
|
||||
m_receivedData = m_receivedData.mid(result.frameSize);
|
||||
m_receivedData.remove(0, result.frameSize);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -191,7 +191,7 @@ void Smtp::readyRead()
|
||||
const int pos = m_buffer.indexOf("\r\n");
|
||||
if (pos < 0) return; // Loop exit condition
|
||||
const QByteArray line = m_buffer.left(pos);
|
||||
m_buffer = m_buffer.mid(pos + 2);
|
||||
m_buffer.remove(0, (pos + 2));
|
||||
qDebug() << "Response line:" << line;
|
||||
// Extract response code
|
||||
const QByteArray code = line.left(3);
|
||||
|
@ -318,7 +318,7 @@ void Path::stripRootFolder(PathList &filePaths)
|
||||
return;
|
||||
|
||||
for (Path &filePath : filePaths)
|
||||
filePath.m_pathStr = filePath.m_pathStr.mid(commonRootFolder.m_pathStr.size() + 1);
|
||||
filePath.m_pathStr.remove(0, (commonRootFolder.m_pathStr.size() + 1));
|
||||
}
|
||||
|
||||
void Path::addRootFolder(PathList &filePaths, const Path &rootFolder)
|
||||
|
Loading…
Reference in New Issue
Block a user