QAbstractItemModel内存使用情况

时间:2017-06-25 05:21:48

标签: c++ memory-management qt5 qabstractitemmodel

我正在将一个~2 MB的json文件读取到由 QTreeView 可视化的 QAbstractItemModel 。每个json对象都转换为模型中的一行。该程序在内存中消耗+ 700 MB。这种存储空间和内存使用率的比例不是很令人满意。

我假设,QAbstractItemModel负责:

  • 使用非常小的json文件,内存消耗降至约50 MB。

  • 禁用视图 setModel 功能不会显着改变内存消耗。

这是预期的行为吗?我假设没有。 有没有办法优化内存使用?我认为这应该在模型数据项实现中处理。我在下面附加了我的RowItem实现:

.h文件:

select ID,Deadline 
    from (
        select ID,
        Deadline, 
        ROW_NUMBER() over(partition by ID order by Deadline) RowNum 
        from (select distinct ID, Deadline from SourceTable) T
        ) Tbl
        where RowNum = 2

.cpp文件

class RowItem
{
public:
    explicit RowItem();
    virtual ~RowItem();

    void setParent( RowItem * p_pParent );
    void appendChild( RowItem * p_pChild );

    void insertChild( int p_nRow, RowItem * p_pChild );
    bool removeChild(int p_nRow);
    bool replaceChild(RowItem * p_pOldChild , RowItem *p_pNewChild);

    RowItem * child( int p_nRow ) const;

    int rowCount() const;
    int columnCount() const;

    int column( const QVariant & p_grData, int p_nRole = Qt::DisplayRole ) const;
    QVariant data(const int & p_nColumn, int p_nRole = Qt::DisplayRole ) const;
    int row() const;
    RowItem * parentItem();
    bool setData( const int & p_nColumn, const QVariant & p_grData, int p_nRole = Qt::DisplayRole );

    RowItem & operator=( RowItem & pSrc );

protected:
    QList< RowItem * >   m_pChildItems;
    QList< QMap< quint8, QVariant > > m_grColList; /// @attention List index = column; value map: quint8 = p_nRole ( e.g. Qt::DisplayRole, limited to max 256), QVarinat = data
    RowItem            * m_pParentItem;
};

0 个答案:

没有答案