ich habe ein ziemlich ernsthaftes problem mit meinem programm. ich lege während der laufzeit ca 1 mio objekte auf dem heap an. diese objekte werden erzeugt, indem eine xml datei geparset wird und jedes tag als objekt angelegt wird. wenn ich den taskmanager öffne verbraucht mein programm fast 570000k speicher. soweit alles kein problem wenn man einen relativ neuen rechner hat. wenn ich aber nach allen berechnungen die objekte wieder löschen bzw den speicher freigeben will hängt sich meine gui/programm auf und im taskmanager wird der speicherverbrauch auch nicht weniger, was ja eigentlich der fall sein sollte wenn ich diesen wieder freigebe. der parser wird während der laufzeit angelegt und nach allen aufgaben wieder gelöscht. folglich wird der destruktor aufgerufen:
Code: Alles auswählen
OSM_Parser::~OSM_Parser()
{
delete reader;
delete file;
qDebug() << "Destruktor";
if(!relationContainer.isEmpty())
{
qDebug() << "relationContainer";
QHashIterator<QString, OSM_Relation*> i(relationContainer);
while (i.hasNext())
{
//qDebug() << "delete relation";
i.next();
OSM_Relation *relation = i.value();
delete relation;
}
relationContainer.clear();
}
if(!wayContainer.isEmpty())
{
//qDebug() << "wayContainer";
QHashIterator<QString, OSM_Way*> x(wayContainer);
while (x.hasNext())
{
//qDebug() << "delete way";
x.next();
OSM_Way *way = x.value();
delete way;
}
wayContainer.clear();
}
if(!nodeContainer.isEmpty())
{
//qDebug() << "nodeContainer";
QHashIterator<QString, OSM_Node*> k(nodeContainer);
while (k.hasNext())
{
//qDebug() << "delete node";
k.next();
OSM_Node *node = k.value();
delete node;
}
nodeContainer.clear();
}
}
was mache ich falsch bzw kennt jmd ne alternative ?