Geschwindigkeit
Verfasst: So, 04.01.2009 10:13
Mein System: OOo 3.00, Vista Ulimate 32b, Core2Duo E6600, 2 GB RAM.
Vorerfahrung: MS Access 2.0, dann 97.
Da MS Access 97 sich nach einer Windows-Neuinstallation nicht mehr bei mir installieren lassen wollte, bin ich auf OO Base umgestiegen. Mit ist klar, dass man bei Freeware mit einer kürzeren Geschichte der Programmentwicklung Abstriche machen muss. Dennoch möchte ich folgende Beobachtungen nennen um herauszufinden, was ich anders machen kann oder wo den OO-Programmierern Vorschläge gemacht werden sollten.
1) OO Base nutzt nur einen CPU-Kern. Kann man beide nutzen?
2) Das Öffnen einer Tabelle dauert etwas länger. Das kann ich zwar tolerieren, aber es erstaunt mich. Selbst mit MS Access 2.0 auf einem Pentium 3 ging es schneller. Es ist also offensichtlich eine Frage der Algorithmen, wie beim Öffnen einer Tabelle auf deren Datensätze zugegriffen wird, um diejenigen auszulesen, die zuerst zu sehen sein sollen. Oder kann ich da selbst etwas tun, um es schneller zu machen?
3) Nach dem Öffnen einer Tabelle: Wenn ich auf den Button >| klicke, um die letzte Datenbankseite anzuzeigen, dauert das deutlich länger (ein paar Sekunden bei CPU-Auslastung ca. 50%, d.i. ein Kern voll ausgelastet, statt sofort) als mit MS Access 2.0 auf einem Pentium 3. Es muss also auch wieder am Algorithmus liegen. Oder was könnte ich selbst unternehmen, bevor ich den Programmierern eine Anregung gebe?
4) Bild hoch, Bild runter, entsprechend klicken oder an den Anfang gehen usw. dauern auch ihre Zeit, statt wie bei MS Access sofort zu funktionieren. Das ist verwandt zu (3), aber die CPU-Nutzung ist nur ca. 30% und es dauert nicht ganz so lange.
Bei der Programmierung könnte Folgendes verbessert werden:
- Nutzung aller CPU-Kerne.
- Vorher-Ausführen im Hintergrund von Standard-GUI-Kommandos, sodass sie beim tatsächlichen Anklicken / Tastaturanschlag schon (weitgehend) ausgeführt sind und das Ergebnis nur noch auf dem Bildschirm angezeigt werden muss.
- Bessere Algorithmen zum schnelleren Auslesen anzuzeigender Datensätze. (*)
(*) Ich weiß nicht, wie eine OO-Datenbankdatei aufgebaut ist. Liegen die Daten quasi in Tabellenform vor oder muss da erst dekomprimiert und umorganisert werden? Wenn sie in Tabellenform gespeichert sind, gibt es keinen Grund, warum sie nicht sofort angezeigt werden könnten: Man muss nur per Zeiger auf z.B. die letzten z (so viele eben auf dem Bildschirm passen) Datensätze auf ihre Datenvariablen zugreifen. Das geht mindestens in der Laufzeit O(n), wobei n die Anzahl der Datensätze in der Tabelle ist. Also sehr schnell. (Man könnte es sogar noch schneller machen, denn Suche eines ersten Datensätzes geht in O(log n). Suche des letzten Datensatzes kann man sogar in O(1) durchführen.) Wieso also dauert es überhaupt länger als Millisekunden? Ist das OO-Datenbankdateiformat auf Speicherplatz statt auf Geschwindigkeit optimiert?
Vorerfahrung: MS Access 2.0, dann 97.
Da MS Access 97 sich nach einer Windows-Neuinstallation nicht mehr bei mir installieren lassen wollte, bin ich auf OO Base umgestiegen. Mit ist klar, dass man bei Freeware mit einer kürzeren Geschichte der Programmentwicklung Abstriche machen muss. Dennoch möchte ich folgende Beobachtungen nennen um herauszufinden, was ich anders machen kann oder wo den OO-Programmierern Vorschläge gemacht werden sollten.
1) OO Base nutzt nur einen CPU-Kern. Kann man beide nutzen?
2) Das Öffnen einer Tabelle dauert etwas länger. Das kann ich zwar tolerieren, aber es erstaunt mich. Selbst mit MS Access 2.0 auf einem Pentium 3 ging es schneller. Es ist also offensichtlich eine Frage der Algorithmen, wie beim Öffnen einer Tabelle auf deren Datensätze zugegriffen wird, um diejenigen auszulesen, die zuerst zu sehen sein sollen. Oder kann ich da selbst etwas tun, um es schneller zu machen?
3) Nach dem Öffnen einer Tabelle: Wenn ich auf den Button >| klicke, um die letzte Datenbankseite anzuzeigen, dauert das deutlich länger (ein paar Sekunden bei CPU-Auslastung ca. 50%, d.i. ein Kern voll ausgelastet, statt sofort) als mit MS Access 2.0 auf einem Pentium 3. Es muss also auch wieder am Algorithmus liegen. Oder was könnte ich selbst unternehmen, bevor ich den Programmierern eine Anregung gebe?
4) Bild hoch, Bild runter, entsprechend klicken oder an den Anfang gehen usw. dauern auch ihre Zeit, statt wie bei MS Access sofort zu funktionieren. Das ist verwandt zu (3), aber die CPU-Nutzung ist nur ca. 30% und es dauert nicht ganz so lange.
Bei der Programmierung könnte Folgendes verbessert werden:
- Nutzung aller CPU-Kerne.
- Vorher-Ausführen im Hintergrund von Standard-GUI-Kommandos, sodass sie beim tatsächlichen Anklicken / Tastaturanschlag schon (weitgehend) ausgeführt sind und das Ergebnis nur noch auf dem Bildschirm angezeigt werden muss.
- Bessere Algorithmen zum schnelleren Auslesen anzuzeigender Datensätze. (*)
(*) Ich weiß nicht, wie eine OO-Datenbankdatei aufgebaut ist. Liegen die Daten quasi in Tabellenform vor oder muss da erst dekomprimiert und umorganisert werden? Wenn sie in Tabellenform gespeichert sind, gibt es keinen Grund, warum sie nicht sofort angezeigt werden könnten: Man muss nur per Zeiger auf z.B. die letzten z (so viele eben auf dem Bildschirm passen) Datensätze auf ihre Datenvariablen zugreifen. Das geht mindestens in der Laufzeit O(n), wobei n die Anzahl der Datensätze in der Tabelle ist. Also sehr schnell. (Man könnte es sogar noch schneller machen, denn Suche eines ersten Datensätzes geht in O(log n). Suche des letzten Datensatzes kann man sogar in O(1) durchführen.) Wieso also dauert es überhaupt länger als Millisekunden? Ist das OO-Datenbankdateiformat auf Speicherplatz statt auf Geschwindigkeit optimiert?