Seite 1 von 1
wie ablauf schneller machen
Verfasst: So, 30.11.2008 14:22
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?
Re: wie ablauf schneller machen
Verfasst: So, 30.11.2008 15:02
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
Re: wie ablauf schneller machen
Verfasst: So, 30.11.2008 15:52
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
Re: wie ablauf schneller machen
Verfasst: So, 30.11.2008 16:47
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.
Re: wie ablauf schneller machen
Verfasst: Mi, 10.12.2008 17:37
von steffn
okay ich habe so einiges ausprobiert und fühle mich trotzdem nicht viel schlauer
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
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
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?
Re: wie ablauf schneller machen
Verfasst: Mi, 10.12.2008 20:08
von komma4
steffn hat geschrieben:sie nach ablauf meines programmcodes zu sehen
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?
Re: wie ablauf schneller machen
Verfasst: Do, 11.12.2008 00:11
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
Re: wie ablauf schneller machen
Verfasst: Do, 11.12.2008 05:47
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]
Re: wie ablauf schneller machen
Verfasst: Sa, 20.12.2008 17:48
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:
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?
Re: wie ablauf schneller machen
Verfasst: So, 21.12.2008 04:04
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.
Re: wie ablauf schneller machen
Verfasst: So, 21.12.2008 04:34
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?
Re: wie ablauf schneller machen
Verfasst: So, 21.12.2008 05:18
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!
Re: wie ablauf schneller machen
Verfasst: Mi, 31.12.2008 21:07
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.