zoukankan      html  css  js  c++  java
  • QDir::count 可能消耗过多内存,咋一看像内存泄漏

    用 QDir::count 获取文件夹的文件数很方便。

    但在文件夹里有数百万个文件的时候,执行一次 QDir::count 就可能花费上 GB 的内存。

    uint QDir::count() const
    {
        const QDirPrivate* d = d_ptr.constData();
        d->initFileLists(*this);
        return d->files.count();
    }

    其中 initFileLists 创建了一个 QDirIterator 链表。

    而这个链表又创建了 QDirIteratorPrivate

    而 QDirIteratorPrivate 的构造函数又做了以下操作

    QFileInfo fileInfo(new QFileInfoPrivate(dirEntry, metaData));
    
    // Populate fields for hasNext() and next()
    pushDirectory(fileInfo);

    由此可见,在得到文件总数之前,文件夹里每个子文件的信息都要被装进内存里。

    于此相对,用Windows API 函数 FindFirstFile 则一次只需要在内存中保存一个文件的信息,占用的内存要小很多。

  • 相关阅读:
    尘埃里的路人甲
    尘埃里的路人辛
    尘埃里的路人庚
    尘埃里的路人己
    尘埃里的路人戊
    尘埃里的路人丁
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
  • 原文地址:https://www.cnblogs.com/liujx2019/p/14445091.html
Copyright © 2011-2022 走看看