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 则一次只需要在内存中保存一个文件的信息,占用的内存要小很多。

  • 相关阅读:
    JavaScript 弹窗
    创建对象构造器
    DOM事件
    document对象“还在更新”
    JavaScript 闭包
    使用 "use strict" 指令
    constructor 属性
    2019暑期集训第一周小结
    无向图求割边
    矩阵快速幂
  • 原文地址:https://www.cnblogs.com/liujx2019/p/14445091.html
Copyright © 2011-2022 走看看