Anzeige:
Ergebnis 1 bis 3 von 3

Thema: [QT4] Verbrauche zu viel Speicher beim auslesen von XML

  1. #1
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255

    [QT4] Verbrauche zu viel Speicher beim auslesen von XML

    Morgen, Ich versuche mich mal wieder an QT und habe ein Problem mit meiner Anwendung beim Auslesen/Einfügen von XML Daten in ein QTableWidget.
    Da ich nicht gerade der C++ Kenner bin weiss ich nicht was ich hier falsch mache.
    Auf jeden Fall verbrate ich in der Methode FillRimTableWidget() zu viel Speicher, die Anwendung startet extrem langsam. Wie kann ich das ganze Optimieren?
    PHP-Code:
    QDomDocument SpokecalculatorXmlReader::OpenXmlFile( const charxml, const charfirst )
    {
            
    QString fp"/home/Projekte/qspokecalc/data/" );
            
    fp.appendxml );
            
    fp.append".xml" );

            
    QFile filefp );
            if ( 
    file.openQIODevice::ReadOnly ) ) {
                    
    QDomDocument newdocfirst );
                    if ( ! 
    newdoc.setContent( &file ) )
                            
    std::cout << "cant parse DomDocument" << std::endl;

                    
    file.close();
                    return 
    newdoc;
            } else
                    
    std::cout << "cant open XML Document" << std::endl;

            
    file.close();
            
    QDomDocument doc"empty" );
            return 
    doc;
    }

    void SpokecalculatorXmlReader::FillRimTableWidgetQTableWidget *table )
    {
            
    int i 0;
            
    int NumCount 0;
            
    QDomDocument xmldom OpenXmlFile"rims""rimslist" );
            
    QDomElement rootNode xmldom.documentElement();
            
    QDomNode ChildNode rootNode.firstChild();
            while( ! 
    ChildNode.isNull() ) {
                    
    QDomElement nextChild ChildNode.toElement();
                    if( ! 
    nextChild.isNull() && nextChild.isElement() == true ) {
                            
    QDomNode valnextChild.firstChild() );
                            
    QDomAttr attr_nar nextChild.attributeNode"nar" );
                            
    table->insertRowNumCount );
                            
    table->setItemNumCount0, new QTableWidgetItemval.nodeValue() ) );
                            
    table->setItemNumCount1, new QTableWidgetItemattr_nar.value() ) );
                            
    NumCount++;
                    }

                    if ( 
    >= 5000 || NumCount >= 5000 )
                            break;

                    
    ChildNode ChildNode.nextSibling();

                    
    i++;
            }

    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das Startzeitproblem kann man meisten mit einer verzögerten Abarbeitung beheben, d.h. man startet während der grundsätzlich Initialisierung nur einen Timer (mit 0 ms Timeout) und im dem damit verbundenen Slot macht man dann die aufwendigereren Dinge.

    Dadurch ist die GUI schon da und die empfunden Geschwindigkeit ist höher.

    Wenn das XML Parsen zu lange dauert oder wie in deinem Fall viel Speicher braucht, muß man auf die Bequemlichkeit eines DOM Parsers verzichten und den SAX Parser Weg wählen.

    Siehe QXmlReader

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer Avatar von undefined
    Registriert seit
    01.03.2004
    Beiträge
    1.255
    Ich habe es jetzt mit einem Splash gelöst.
    Seltsamerweise ist die Lade Zeit die gleiche auch wenn ich 3 TableWidgets mit je ca. 600 -> 1000 Konten Gleichzeitig einlese. So wie es aussieht braucht QT nur beim ersten Initialisieren der Klasse diese Zeit, bei den weiteren Aufrufen wird dann anscheinend Recht zügig abgearbeitet.
    mfg undefined
    --
    Undefined Behavior (undefiniertes Verhalten) bedeutet meistens etwas ungültiges.
    xhtml Debugger

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •