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.
Aloha
[quote="Entchen19"]Habt ihr noch Empfehlungen, die generell helfen, die Performance hochzuschrauben bei größeren Makros mit vielen Schleifen etc.?[/quote]
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.