Performanceverbesserungen - Tipps?

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Performanceverbesserungen - Tipps?

Re: Performanceverbesserungen - Tipps?

von DPunch » So, 22.01.2012 22:07

Aloha
Entchen19 hat geschrieben:Habt ihr noch Empfehlungen, die generell helfen, die Performance hochzuschrauben bei größeren Makros mit vielen Schleifen etc.?
Die Tips, die generell am meisten Performancezuwachs bringen, sind:

1) Aktualisierungen abschalten (thisComponent.lockControllers)

2) Wann immer möglich, vor allem in Calc-Dokumenten, nicht Zellen einzeln ansprechen, sondern mit den Data-Arrays arbeiten (.getDataArray / .setDataArray)
Je weniger Interaktion mit den Dokumenten und je mehr purer Basic-Code, desto schneller.

3) Objekte immer vor Schleifen so nah wie möglich referenzieren, sprich nicht in Schleifen sowas wie thisComponent.Sheets.getByIndex(i) benutzen, sondern vorher schon ala oSheets = thisComponent.Sheets eine Variable benutzen, so dass in der Schleife selber nur noch ein oSheets.getByIndex(i) nötig ist (einfaches Beispiel, es gibt deutlich performancestörendere Referenz-Ketten als den Zugriff auf Calc-Sheets)

Dinge wie das von Dir genannte .setString vs .String= sind dagegen vollkommen vernachlässigbar, die beeinträchtigen die Performance (wenn überhaupt) nicht in spürbarer Weise.

Im Allgemeinen wirst Du Dich allerdings damit abfinden müssen, dass VBA um Lichtjahre schneller ist als OOo Basic.

Re: Performanceverbesserungen - Tipps?

von balu » So, 08.01.2012 22:22

Hallo Entchen,

ohne dein Makro zu kennen, gibt es keine verlässliche Tipps um es Speed mäßig zu optimieren. Wir wissen ja noch nicht mal was Du überhaupt machst; z.B. einfache Berechnungen durchführen, oder Datei laden bearbeiten speichern, oder .....

Aber dennoch habe ich da was für dich, wobei ich ja nicht weiß ob das bei dir zutrifft.
Guckst Du hier.
Vielleicht sollest Du dir den Thread komplett durchlesen.

bei größeren Makros mit vielen Schleifen
Was für Schleifen?
Do...Loop
For...Next
While...Wend
Damit hab ich noch nicht so viel Erfahrung.


Vielleicht hilf ja noch folgendes.
Wenn z.B. etwas komplizierteres berechnet werden soll und es dafür schon eine fertige Calc-Funktion gibt, wie z.B. Ostersonntag, dann würd ich solche Sachen lieber in Calc mit der dementsprechenden Funktion berechnen lassen und dann aus dem Makro heraus auf das Ergebnis zugreifen.

Der Sinn dabei ist nämlich folgender (lapidar ausgedrückt).
Basic ist keine Maschinensprache, und folglich muss ein Dolmetscher herhalten um die Basicbefehle zu übersetzen. Und dies übersetzen dauert halt seine Zeit.



Gruß
balu

Performanceverbesserungen - Tipps?

von Entchen19 » So, 08.01.2012 21:04

Hallo zusammen,

ich portiere gerade ein etwas umfangreicheres VBA Makro von Excel in OO Calc.

Soweit habe ich jetzt alles drüben, muss aber zugeben, dass das Ausführen des Makros in Excel max. so 10 Sekunden braucht, in OO dagegen so 40 ...

Daher meine Frage, was ich hier noch an der Performance verbessern kann, gibt es generelle Tipps?

Bildschirmaktualisierung habe ich schon ausgeschaltet, was kann man hier noch machen?
Evtl. die Aktualisierung der Inhalte bei Formeln etc.?

Du Zuweisungen im Makro mache ich jetzt schon so:

Code: Alles auswählen

oSheet.getCellRangeByName("E" & i).setString("Tag " & Format(iDaycount, "000"))
Anstatt so:

Code: Alles auswählen

oSheet.getCellRangeByName("E" & i).String = "Tag " & Format(iDaycount, "000")
weil das auch etwas sparen soll.

Habt ihr noch Empfehlungen, die generell helfen, die Performance hochzuschrauben bei größeren Makros mit vielen Schleifen etc.?

Die meiste Zeit frisst, wenn ich den Zellen gezielt Formeln zuweise und solche Dinge.

LG
Entchen

Nach oben