wie ablauf schneller machen

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

wie ablauf schneller machen

Beitrag von steffn »

hallo erfahrene openofficeprogrammierer

ich habe fertig
naja, ich habe relativ fertig, was ich in openoffice programmieren wollte
und nun bin ich überrascht, wie lange das ding braucht, bis es durchgelaufen ist - über eine minute
da stellt sich bei mir die frage, wie ich es schneller machen kann und hoffe, dass jemand mit erfahrung antworten hat

1. ich habe keine globalen variablen, stattdessen übergebe ich die von funktionen und prozeduren benötigten beim aufruf
wird der programmcodeablauf eher schneller, langsamer oder genauso schnell, wenn man das andersherum macht?

2. und wie verhält sich das mit vielen kleinen funktionen und prozeduren im vergleich zu wenigen längeren?

3. außerdem greife ich immer wieder auf die gleichen (unveränderten) textfelder zu um deren text auszulesen, was ich allerdings auch nur einmal zu beginn machen könnte um sie in einem datenfeld zu speichern
egal, schneller oder langsamer?

4. meine variablennamen sind sehr lang, spielt das eine rolle?

5. mir ist auch eingefallen, dass man in visual basic (ich glaube zumindest, dass es visual basic war) ein eigenständiges programm erzeugen konnte - gibt es etwas vergleichbares für openoffice-basic?

6. hat man in openoffice irgendeine möglichkeit, maschinencodenah (yeah tolles wort!) zu programmieren?
oo4.1.2 in winxp pro mit sp3
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: wie ablauf schneller machen

Beitrag von komma4 »

steffn hat geschrieben:und nun bin ich überrascht, wie lange das ding braucht, bis es durchgelaufen ist - über eine minute
Was macht Dein Code?

"Lange" dauern die am Bildschirm sichtbaren Operationen (Stichwort: Dokument im Hintergrund bearbeiten) und bspw. in Calc das Einfügen/Bearbeiten einzelner Zellen (anstelle: get-/setDataArray)

1. sollte egal sein
2. sollte egal sein
3. schneller: in Variablen speichern
4. nein
5. nein
6. nein
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: wie ablauf schneller machen

Beitrag von steffn »

komma4 hat geschrieben:Was macht Dein Code?
buchstaben aus textfeldern auslesen, sie aneinanderreihen, in tabelle mit wörtern suchen, wenn erfolgreich in anderer tabelle anzeigen - etwas zwischen scrabble und einem anagramm-generator
komma4 hat geschrieben:"Lange" dauern die am Bildschirm sichtbaren Operationen (Stichwort: Dokument im Hintergrund bearbeiten) und bspw. in Calc das Einfügen/Bearbeiten einzelner Zellen (anstelle: get-/setDataArray)
den satz verstehe ich nicht ganz, vielleicht weil ich den inhalt der klammern (noch) nicht kenne
bedeutet er "Lange dauern die am Bildschirm sichtbaren Operationen (besser: Dokument im Hintergrund bearbeiten) und bspw. in Calc das Einfügen/Bearbeiten einzelner Zellen (besser: get-/setDataArray)"?
dann gib mir bitte ein beispiel für 'Dokument im Hintergrund bearbeiten' und 'Dokument nicht im Hintergrund bearbeiten' - setdataarray finde ich hier im forum
komma4 hat geschrieben:3. schneller: in Variablen speichern
danke, das werde ich ausprobieren
komma4 hat geschrieben:5. nein
sehr schade
wann genau wird das in openoffice eingebaut
X-D
oo4.1.2 in winxp pro mit sp3
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: wie ablauf schneller machen

Beitrag von komma4 »

"Im Hintergrund" bedeutet, dass das bearbeitende Dokument hidden geöffnet wird und erst nach der Bearbeitung angezeigt wird, bzw. bei einem sichtbaren Dok. der frame während der Bearbeitung versteckt wird.
Sieh zB mal hier http://www.oooforum.org/forum/viewtopic.phtml?t=36652
... und in meiner Extension OOoDIL - DokumentInfoListe (Dokumenterzeugung im Hintergrund, ProgressBar zur Fortschrittsanzeige)


Ich glaube nicht, dass eine Basic-runtime Komponente entwickelt wird (auf der Agenda steht)


Das Suchen der zusammengesetzten Worte in der Tabelle... das scheint ein Zeitfresser zu sein. Setze mal einen timer ein (F1), um die Laufzeit einzelner Funktionen zu messen.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: wie ablauf schneller machen

Beitrag von steffn »

okay ich habe so einiges ausprobiert und fühle mich trotzdem nicht viel schlauer
komma4 hat geschrieben:Sieh zB mal hier http://www.oooforum.org/forum/viewtopic.phtml?t=36652
da fallen mir einige fragen ein
äußerst interessant finde ich: geht es darum, dass das fenster der datei, auf die während dem ablauf zugegriffen wird nicht sichtbar oder nicht aktiv oder minimiert sein soll?
ist es genauso gut oder sogar noch besser das fenster eines anderen programms als vollbild aktiviert zu haben?

komma4 hat geschrieben:... und in meiner Extension OOoDIL - DokumentInfoListe (Dokumenterzeugung im Hintergrund, ProgressBar zur Fortschrittsanzeige)
ich habe sie mir angesehen und ich muss sagen, ich verstehe gar nichts :D
das sind mehr als 20 seiten code, mal ganz ehrlich, wie soll das einem anfänger helfen? :o
ich habe dann nach "hidden" suchen lassen, die drei zeilen

Code: Alles auswählen

Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
FileProperties(0).Name = "Hidden"
FileProperties(0).Value = TRUE
kopiert und bei mir eingebaut
scheint zu funktionieren, denn man sieht absolut nichts von meinen beiden dateien
ich fände es allerdings sehr schön, sie nach ablauf meines programmcodes zu sehen :wink:

naja, ich schätze mal speichern und hidden-false-öffnen lassen ist die dazu passende abhilfe



und eine neue frage:
spielt es eine rolle, in was für einer datei der programmcode gespeichert ist beziehungsweise abläuft?
oo4.1.2 in winxp pro mit sp3
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: wie ablauf schneller machen

Beitrag von komma4 »

steffn hat geschrieben:sie nach ablauf meines programmcodes zu sehen :wink:
Naja, wie sehr Du Anfänger bist, kann ich von hier aus nicht beurteilen. Aber lesen kannst Du ja: die Zeilen mit einem Hochkomma als erstes Zeichen sind Kommentare, 18 Zeilen unter dem loadComponent... steht Fenster anzeigen
steffn hat geschrieben:spielt es eine rolle, in was für einer datei der programmcode gespeichert ist beziehungsweise abläuft?
Ja - wenn Du ThisComponent verwendest (siehe F1 Hilfe)


Die Verweise im ersten Posting (von Stephan) des OOo Basic und Java Bereichs hast Du gelsen?
Andrew Pitonyaks Dokument geholt und gelesen?
XRay geholt und installiert?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: wie ablauf schneller machen

Beitrag von steffn »

komma4 hat geschrieben:... 18 Zeilen unter dem loadComponent... steht Fenster anzeigen
oh das habe ich nicht gesehen, da ich vorher schon aufgegeben habe
danke, werd' ich ausprobieren
komma4 hat geschrieben:Ja - wenn Du ThisComponent verwendest (siehe F1 Hilfe)
wenn das wirklich etwas mit der geschwindigkeit zu tun hat, brenne ich auf eine erklärung, denn das kann ich mir nicht einmal im entfertesten vorstellen
viel wahrscheinlicher hast du mich falsch verstanden:
spielt es eine rolle, in welchem teil der von mir benutzten dateien (aus der gelesen wird, in die geschrieben wird oder eine unbeteiligte) (ods oder odt) mein code abläuft?
komma4 hat geschrieben:Die Verweise im ersten Posting (von Stephan) des OOo Basic und Java Bereichs hast Du gelsen?
Andrew Pitonyaks Dokument geholt und gelesen?
XRay geholt und installiert?
ja
ja und nein
ja
aber ich bezweifle, dass da tipps zur code-optimierung drinstehen - zumindest habe ich bisher noch nichts derartiges gesehen
oo4.1.2 in winxp pro mit sp3
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: wie ablauf schneller machen

Beitrag von komma4 »

steffn hat geschrieben:viel wahrscheinlicher hast du mich falsch verstanden:
Ja!
steffn hat geschrieben:spielt es eine rolle, in welchem teil der von mir benutzten dateien (aus der gelesen wird, in die geschrieben wird oder eine unbeteiligte) (ods oder odt) mein code abläuft?
Nein.
steffn hat geschrieben:zumindest habe ich bisher noch nichts derartiges gesehen
Ich meine mich zu erinnern, dass er zumindest das Thema anspricht: Stichwort timer, auch geht er auf den Unterschied (bei Calc) zwischen einzelnen Zellzugriffen und Array-Bearbeitung ein.
[Musst Du mal selbst lesen... ich muss erst mal ins Wasser, es hat hier schon wieder über 30 Grad]
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: wie ablauf schneller machen

Beitrag von steffn »

Ich denke, dass mit "er" Andrew und sein Dokument, mit "Dokument" AndrewMacro.odt gemeint ist. Da das sehr lang ist, brauche ich Hinweise, nach den ich suchen kann - "timer" wird leider nur einmal gefunden und zwar da:

Bild

Mittlerweile denke ich, Du könntest sehr gut diesen Teil:"... was able to find the cell that contained the text in around 1184 clock ticks. Next, I modified the macro to use a data array. Using a data array takes the time down to closer to 54 clock ..." meinen, in dem ausgerechnet "timer" zufälligerweise nicht vorkommt.


Direkt danach steht übrigens "Searching the sheet directly is much faster at 34 ticks!" womit er 'findfirst' in Zusammenhang mit 'searchdescription' meint.
Das haben auch meine Testläufe ergeben, widerspricht aber meiner Annahme, dass alles was man im Datenfeld erledigen kann schneller geht als auf Tabellenblättern.

Ist die Suche nach Zellinhalten direkt im Tabellenblatt unschlagbar oder gibt es Tricks/Kniffe/Funktionen um Datenfelder schneller zu durchsuchen, als - so wie ich jetzt - ein Feld nach dem anderen abzugleichen?
oo4.1.2 in winxp pro mit sp3
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: wie ablauf schneller machen

Beitrag von komma4 »

steffn hat geschrieben:Ist die Suche nach Zellinhalten direkt im Tabellenblatt unschlagbar oder gibt es Tricks/Kniffe/Funktionen um Datenfelder schneller zu durchsuchen, als - so wie ich jetzt - ein Feld nach dem anderen abzugleichen?
Gut gefolgert / gefunden / gelesen.
[bitte verzeih' mir: ich habe immer noch eine Kopie (*.sxw) von 2003 hier auf'm Rechner, keine Lust zu "arbeiten" und noch Urlaub - bei 30 Grad fällt auch mir das Denken / Erinnern schwer]

Soweit ich das weiss und verfolgt habe: je mehr Zellen durchsucht werden, desto schneller ist die Suche per SearchDescriptor. Ein direkter Zellzugriff (auch innerhalb einer Schleife) "kostet" genausoviel Zeit, wie das Holen eines (grossen) DatenArrays.

Zu Deiner Frage: ja (hat Andrew auch so beantwortet, oder?): die direkte Suche ist "unschlagbar".
Es kommt auch darauf an was nach der Suche passieren soll: willst Du nur ein "Vorkommen" feststellen, oder anschliessend etwas ändern (was ein ReplaceDescriptor nicht könnte: Berechnungen, vom Wert abhängige Inhaltsänderungen) ?
Bei einer Suche über mehrere Blätter/oder und Tausende von Zellen ist dann die Bearbeitung mittels DatenArray unerläüsslich.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: wie ablauf schneller machen

Beitrag von steffn »

komma4 hat geschrieben:Zu Deiner Frage: ja (hat Andrew auch so beantwortet, oder?): die direkte Suche ist "unschlagbar".
Gut, aber ich denke, dass die Texte von Andrew nicht zu jeder Zeit lückenlos/"allwissend" sind und somit jemand, der meine Frage liest, durchaus mehr wissen könnte, als ich in der Datei gelesen habe.
komma4 hat geschrieben:Es kommt auch darauf an was nach der Suche passieren soll: willst Du nur ein "Vorkommen" feststellen, oder ...
Zur Zeit ja, aber ich wüsste trotzdem gerne wo die Unterschiede liegen. Wenn es tatsächlich nur um eine mögliche anschließende Bearbeitung geht: gut, verstanden.


Ich bin gestern Nachmittag auf die Idee gekommen, meine vielen Wörter nicht nur abhängig vom ersten Buchstaben auf Spalten in einem Tabellenblatt zu verteilen, sondern sie auch auf verschiedene Tabellenblätter zu verteilen. Dadurch dürfte ich dann die Anzahl der zu durchsuchenden möglichen Übereinstimmungen auch noch anhand des zweiten Buchstabens deutlich eingrenzen können, wobei ich die Blätter und Spalten mit Hilfe der Unicodeindexe des jeweiligen Buchstabens anspreche. Beispiele: Aachen steht im ersten der benutzten Blätter in der ersten benutzten Spalte, München im 13. Blatt in der ... ganz weit hinten!
Ideen, wie man Suchen nach einer Zeichenfolge noch schneller machen kann?
oo4.1.2 in winxp pro mit sp3
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: wie ablauf schneller machen

Beitrag von komma4 »

steffn hat geschrieben:Beispiele: Aachen steht im ersten der benutzten Blätter in der ersten benutzten Spalte, München im 13. Blatt in der ... ganz weit hinten!
Ideen, wie man Suchen nach einer Zeichenfolge noch schneller machen kann?
Nein: Andrew ist nicht "allwissend" [aber er hat jahrelange, ausgiebige OOo-Programmiererfahrung] - ich auch nicht (und meine Glaskugel beschlagen):
ich habe noch immer keinen Schimmer, was Du machst (oder warum Du suchst). Beschreibe doch zunächst mal Dein Szenario und um welche Daten(-menge) es sich handelt.


Evtl. ist eine Datenbank besser geeignet: Calc ist eine Tabellenkalkulation!
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
steffn
***
Beiträge: 92
Registriert: So, 16.11.2008 15:02

Re: wie ablauf schneller machen

Beitrag von steffn »

Die in Textfelder eingegebenen Buchstaben lasse ich auslesen und in verschiedenen Anzahlen und Reihenfolgen in einem Tabellenblatt mit Wörtern suchen, um zu prüfen, ob diese Zeichenfolge ein Wort darstellt. Etwas ähnliches wie auf http://www.sibiller.de/anagramme
Mittlerweile sind es über 100.000 Wörter.
Ob es mit einer Datenbank schneller funktioniert, weiß ich nicht. Aber ich war mir sicher, dass es für mich einfacher ist, wenn ich Calc benutze.
komma4 hat geschrieben:Das Suchen der zusammengesetzten Worte in der Tabelle... das scheint ein Zeitfresser zu sein. Setze mal einen timer ein (F1), um die Laufzeit einzelner Funktionen zu messen.
Die Prozedur, die nur den Searchdescriptor erstellt und benutzt dauert durchschnittlich etwa zwei Drittel der Gesamtdauer.

Jetzt möchte ich einfach nur noch Geschwindigkeit.
oo4.1.2 in winxp pro mit sp3
Antworten