Seite 1 von 1

SQLite / Arbeitsspeicher

Verfasst: 15. Oktober 2009 11:48
von RobRoy1304
Hallo,

ich hab mal eine Frage zum ''Speicherverbrauch''. Wenn ich in einer SQLite-Datenbank
viele Datensätze habe(mehere 10000) wie verhält sich das mit dem Speicher bei der
Abfrage der Datensätze:

Code: Alles auswählen

int CDbInterface::get_all_dealer_where(QString sCondition,QList <CDealer> & lsDealer)
{
    if(!m_bIsConnect)
        return -1;
    int i=-1;
    CDealer de;
    QString s;
    if(sCondition.length()!=0)
    {
        s=QString("SELECT * FROM dealer WHERE ");
        s+=sCondition;//+condition
    }
    else
        s=QString("SELECT * FROM dealer");
    QSqlQuery query;
    bool b=query.exec(s);
    if(b)
    {
        QSqlRecord record=query.record();
        for(;query.next();i++)
        {
            de.set_id(query.value( record.indexOf("id")).toInt());
            de.set_name(query.value( record.indexOf("name")).toString());
            de.set_adress(query.value( record.indexOf("adress")).toString());
            de.set_callnumber(query.value( record.indexOf("call_numbers")).toString());
            de.set_faxnumber(query.value( record.indexOf("fax_numbers")).toString());
            de.set_email(query.value( record.indexOf("email_adress")).toString());
            de.set_homepage(query.value( record.indexOf("homepage")).toString());
            de.set_contectperson(query.value( record.indexOf("contect_person")).toString());
            de.set_comment(query.value( record.indexOf("comment")).toString());
            de.set_customernumber(query.value( record.indexOf("customer_number")).toString());
            lsDealer.push_back(de);
        }
        i++;
    }
    return i;
}
Werden in der Zeile

Code: Alles auswählen

QSqlRecord record=query.record();
alle Datensätze
in den Arbeitsspeicher geschrieben oder werden die Datensätze ''einzelnd'' aus
der Datenbank-Datei mit hilfe der ''query.next()''-Methode nachgeladen????

Ich möchte in meinen Programm möglichst ''Speicherschonend'' arbeiten, damit
das Programm auch auf älteren Rechner funktioniert. Und wenn der Speicher
''überläuft'' und diese Daten dann auf die Festplatte ausgelagert werden, wird
das Programm extrem langsam, erstrecht auf alten Rechnern.

Kennt sich jemand damit aus??? thx
RobRoy

Verfasst: 15. Oktober 2009 13:55
von solarix
Was du suchst ist http://doc.trolltech.com/4.5/qsqlquery. ... orwardOnly

Allerdings sehe ich auf den ersten Blick nicht gerade, wie das vom SQLite-Plugin behandelt wird... am schnellsten wäre vermutlich, einfach schnell den Speicherbedarf des Programmes zu messen (mit und ohne setForwardOnly)..

hth

Verfasst: 15. Oktober 2009 14:52
von RobRoy1304
ich probier es mal , dankeschön