我使用此代码通过套接字传输大文件,而不会出现内存使用高峰:
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和操作系统杀死它。