我正在将一个~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;
};