このコードを使用して、メモリ使用量のスパイクなしでソケットを介して大きなファイルを転送します。
connect(socket, SIGNAL(bytesWritten(qint64)), this, SLOT(refillSocketBuffer(qint64)));
refillSocketBuffer(128*1024);
}
void FtpRetrCommand::refillSocketBuffer(qint64 bytes)
{
if (!file->atEnd()) {
socket->write(file->read(bytes));
} else {
socket->disconnectFromHost();
}
}
これは で正常に動作しますQTcpSocket
が、暗号化された QSslSocket を使用すると、bytesWritten()
信号が常に送信され、ソケットを介してデータを送信するよりもはるかに速く関数が常にソケットに書き込みを行うため、最終的にメモリ使用量は 400 になります。 MBとOSがそれを殺します。