wie ablauf schneller machen
Moderator: Moderatoren
wie ablauf schneller machen
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?
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
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: wie ablauf schneller machen
Was macht Dein Code?steffn hat geschrieben:und nun bin ich überrascht, wie lange das ding braucht, bis es durchgelaufen ist - über eine minute
"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)
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)
Re: wie ablauf schneller machen
buchstaben aus textfeldern auslesen, sie aneinanderreihen, in tabelle mit wörtern suchen, wenn erfolgreich in anderer tabelle anzeigen - etwas zwischen scrabble und einem anagramm-generatorkomma4 hat geschrieben:Was macht Dein Code?
den satz verstehe ich nicht ganz, vielleicht weil ich den inhalt der klammern (noch) nicht kennekomma4 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)
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
danke, das werde ich ausprobierenkomma4 hat geschrieben:3. schneller: in Variablen speichern
sehr schadekomma4 hat geschrieben:5. nein
wann genau wird das in openoffice eingebaut
X-D
oo4.1.2 in winxp pro mit sp3
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: wie ablauf schneller machen
"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.
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)
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)
Re: wie ablauf schneller machen
okay ich habe so einiges ausprobiert und fühle mich trotzdem nicht viel schlauer
ä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?
das sind mehr als 20 seiten code, mal ganz ehrlich, wie soll das einem anfänger helfen?
ich habe dann nach "hidden" suchen lassen, die drei zeilen 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
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?
da fallen mir einige fragen einkomma4 hat geschrieben:Sieh zB mal hier http://www.oooforum.org/forum/viewtopic.phtml?t=36652
ä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?
ich habe sie mir angesehen und ich muss sagen, ich verstehe gar nichtskomma4 hat geschrieben:... und in meiner Extension OOoDIL - DokumentInfoListe (Dokumenterzeugung im Hintergrund, ProgressBar zur Fortschrittsanzeige)

das sind mehr als 20 seiten code, mal ganz ehrlich, wie soll das einem anfänger helfen?

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
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

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
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: wie ablauf schneller machen
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 anzeigensteffn hat geschrieben:sie nach ablauf meines programmcodes zu sehen![]()
Ja - wenn Du ThisComponent verwendest (siehe F1 Hilfe)steffn hat geschrieben:spielt es eine rolle, in was für einer datei der programmcode gespeichert ist beziehungsweise abläuft?
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)
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)
Re: wie ablauf schneller machen
oh das habe ich nicht gesehen, da ich vorher schon aufgegeben habekomma4 hat geschrieben:... 18 Zeilen unter dem loadComponent... steht Fenster anzeigen
danke, werd' ich ausprobieren
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 vorstellenkomma4 hat geschrieben:Ja - wenn Du ThisComponent verwendest (siehe F1 Hilfe)
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?
jakomma4 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 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
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: wie ablauf schneller machen
Ja!steffn hat geschrieben:viel wahrscheinlicher hast du mich falsch verstanden:
Nein.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?
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.steffn hat geschrieben:zumindest habe ich bisher noch nichts derartiges gesehen
[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)
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)
Re: wie ablauf schneller machen
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:

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?

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
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: wie ablauf schneller machen
Gut gefolgert / gefunden / gelesen.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?
[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)
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)
Re: wie ablauf schneller machen
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:Zu Deiner Frage: ja (hat Andrew auch so beantwortet, oder?): die direkte Suche ist "unschlagbar".
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.komma4 hat geschrieben:Es kommt auch darauf an was nach der Suche passieren soll: willst Du nur ein "Vorkommen" feststellen, oder ...
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
- komma4
- ********
- Beiträge: 5332
- Registriert: Mi, 03.05.2006 23:29
- Wohnort: Chon Buri Thailand Asia
- Kontaktdaten:
Re: wie ablauf schneller machen
Nein: Andrew ist nicht "allwissend" [aber er hat jahrelange, ausgiebige OOo-Programmiererfahrung] - ich auch nicht (und meine Glaskugel beschlagen):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?
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)
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)
Re: wie ablauf schneller machen
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.
Jetzt möchte ich einfach nur noch Geschwindigkeit.
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.
Die Prozedur, die nur den Searchdescriptor erstellt und benutzt dauert durchschnittlich etwa zwei Drittel der Gesamtdauer.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.
Jetzt möchte ich einfach nur noch Geschwindigkeit.
oo4.1.2 in winxp pro mit sp3