【问题标题】:Memory leakage in QLocalServer/QLocalSocketQLocalServer/QLocalSocket 内存泄漏
【发布时间】:2016-12-12 00:25:06
【问题描述】:

我在使用 QLocalServer/QLocalSocket 时遇到了一些问题。

我正在从服务器向客户端发送原始像素数据,并且在处理过程中存在巨大的内存泄漏。但我不知道是什么原因...

内存增加约 20MB/1 秒(当我在系统管理员中查看时。)

以下是我的代码。

服务器

void qsharedServer::updateImageData(unsigned char* r_data, int r_width, int r_height, int r_step, int r_label_i){

QLocalSocket* connection = 0;
connection = clientSocket;

if (connection)
{
    if (connection->isOpen())
    {
        QByteArray block;
        QDataStream out(&block, QIODevice::WriteOnly);

        out.setVersion(QDataStream::Qt_5_7);
        const char* rc_data = reinterpret_cast<const char*>(r_data);

        out <<r_step*r_height<< r_width << r_height << r_step;
        out.writeBytes(rc_data, r_step*r_height);
        connection->write(block);
        connection->flush();
    }
}

客户

void qsharedClient::readSocket(){

    QByteArray block = connection->readAll();
    QDataStream in(&block, QIODevice::ReadOnly);
    in.setVersion(QDataStream::Qt_5_7);

    /* Read Raw Data */
    char* data;
    uint size;
    int width;
    int height;
    int step;
    while (!in.atEnd())
    {
        in >> size >> width >> height >> step;
        in.readBytes(data, size);
    }
    emit drawData((unsigned char*)data, width, height, step);
}

这两个代码可以很好地交流,但记忆会急剧增加,超过一定程度就会终止。

我尝试了 connection->reset() 或 QByteArray::clear()..etc,但没有成功。

对我的问题有什么想法吗??

使用QTcpServer/QTcpSocket怎么样??这可以解决我的问题??

请分享您的想法。谢谢!!

【问题讨论】:

标签: memory qt5 qlocalsocket qlocalserver


【解决方案1】:

这应该会发生,因为命名管道会存储所有数据,直到您关闭它。 作为一种解决方案,一旦您为一个数据包发送/接收了足够的数据,您应该为套接字调用disconnectFromServer()(在发送方或接收方 - 无关紧要)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-20
    • 2011-10-31
    • 2019-08-10
    • 2013-06-24
    • 2011-03-22
    • 2015-04-20
    相关资源
    最近更新 更多