1
Discussion | Обсуждение / Re: Memory leak
« on: February 05, 2020, 10:55:55 am »
Супер! =)
News: LimeReport new version 1.5 has been released
Вышла новая версия LimeReport 1.5
This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.
bool ScriptEngineManager::addFunction(const QString& name,
QScriptEngine::FunctionSignature function,
const QString& category,
const QString& description)
void ScriptEngineModel::updateModel()
, в которой используется следующее выражение m_rootNode->clear();
. Но т.к. m_rootNode создается в модели, которая хранится в классе типа Singlton, то при удалении ReportEngine и PreviewReportWidget m_rootNode с дочерними узлами остается в памяти, до завершения приложения. Но также был замечен рост кол-ва ScriptEngineNode почти с каждым новым циклом, а это уже становится похожим на утечку, использовал тот же тест что и выше, и проверял подобным способом:static int countScriptEngineNode = 0;
ScriptEngineNode::ScriptEngineNode( const QString &name, const QString &description, NodeType type, ScriptEngineNode *parent, const QIcon &icon )
: m_name( name ), m_description( description ), m_icon( icon ), m_type( type ), m_parent( parent )
{
qDebug() << "create ScriptEngineNode " << this << ++countScriptEngineNode;
}
ScriptEngineNode::~ScriptEngineNode()
{
qDebug() << "delete ScriptEngineNode" << this << --countScriptEngineNode;
for ( int i = 0; i < m_childs.count(); ++i )
{
delete m_childs[i];
}
}
for ( int i = 0; i < 10; i ++ )
{
TestMemoryLeak();
}
void TestMemoryLeak()
{
QString path = "Путь до отчета";
LimeReport::ReportEngine *limereport = new LimeReport::ReportEngine();
limereport->loadFromFile( path );
auto prev = limereport->createPreviewWidget();
delete prev;
delete limereport;
}
TextItem::TextItem( QObject *owner, QGraphicsItem *parent )
{
listLeak.append( this );
qDebug() << "create " << dynamic_cast<QObject *>( this ) << listLeak.size();
}
TextItem::~TextItem()
{
listLeak.removeOne( this );
qDebug() << "delete" << dynamic_cast<QObject *>( this ) << listLeak.size();
}
for ( int i = 0; i < 100; i++ )
{
PreviewReportWidget *wdg = m_report->createPreviewWidget(); // где m_report = new LimeReport::ReportEngine()
delete wdg;
}
//foreach(PageItemDesignIntf* page, m_renderingPages){
// delete page;
//}
Приветствую! Если речь идет о crosstable то в limereport их покамест нет.