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);
|
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
|
// reset timer when there are activity
|
||||||
m_idleTimer.start();
|
m_idleTimer.start();
|
||||||
connect(m_socket, &QIODevice::readyRead, this, [this]()
|
connect(m_socket, &QIODevice::readyRead, this, [this]()
|
||||||
@ -66,7 +70,18 @@ Connection::~Connection()
|
|||||||
|
|
||||||
void Connection::read()
|
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())
|
while (!m_receivedData.isEmpty())
|
||||||
{
|
{
|
||||||
@ -116,7 +131,7 @@ void Connection::read()
|
|||||||
resp.headers[HEADER_CONNECTION] = u"keep-alive"_s;
|
resp.headers[HEADER_CONNECTION] = u"keep-alive"_s;
|
||||||
|
|
||||||
sendResponse(resp);
|
sendResponse(resp);
|
||||||
m_receivedData = m_receivedData.mid(result.frameSize);
|
m_receivedData.remove(0, result.frameSize);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -191,7 +191,7 @@ void Smtp::readyRead()
|
|||||||
const int pos = m_buffer.indexOf("\r\n");
|
const int pos = m_buffer.indexOf("\r\n");
|
||||||
if (pos < 0) return; // Loop exit condition
|
if (pos < 0) return; // Loop exit condition
|
||||||
const QByteArray line = m_buffer.left(pos);
|
const QByteArray line = m_buffer.left(pos);
|
||||||
m_buffer = m_buffer.mid(pos + 2);
|
m_buffer.remove(0, (pos + 2));
|
||||||
qDebug() << "Response line:" << line;
|
qDebug() << "Response line:" << line;
|
||||||
// Extract response code
|
// Extract response code
|
||||||
const QByteArray code = line.left(3);
|
const QByteArray code = line.left(3);
|
||||||
|
@ -318,7 +318,7 @@ void Path::stripRootFolder(PathList &filePaths)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
for (Path &filePath : filePaths)
|
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)
|
void Path::addRootFolder(PathList &filePaths, const Path &rootFolder)
|
||||||
|
Loading…
Reference in New Issue
Block a user