Domino 9 und frühere Versionen > ND9: Entwicklung

Datenexport Performance optimiert

<< < (2/5) > >>

Legolas:
Hallo Zusammen,

Danke für die Rückmeldungen.

@Umi: Ich exportiere zuerst in eine CSV Datei. War schon deutlich schneller als direkt nach EXCEL zu exportieren.
@Tode: Den Tipp mit der NotesViewEntryCollection werde ich heute noch ausprobieren. Ich gebe dann noch eine Rückmeldung.
@Andrew Harder: OK, das Thema mit dem Navigator Cache ist mir komplett neu. Werde mal prüfen wie das geht und ob das was bringt. AutoViewUpdate auf False hatte ich schon gesetzt.

Grüße
Bernd

Legolas:
Hallo Zusammen,

hier nun die angekündigt Rückmeldung:

@Andrew Harder: Die Cache-Einstellungen hatten leider keinerlei Einfluss auf das Zeitverhalten. Laut Hilfe wird diese Einstellung sowieso nicht verwendet!
@Tode: Die zwei Varianten hatten beim Export von 6000 Dokumenten nur geringe Unterschiede. Auch bei mir war Deine schnellere Variante die Schnellere. Statt 1 Min, 31 Sek brauchte die 1 Min 25 Sek.
Die große Bremse beim Export ist das Auslesen der 159 Spalten mit der Methode "viewentry.ColumnValues(iCols)". Diese benötigt mit Abstand die meiste Zeit. Zudem muss dann noch der Inhalt auf Chr$(10) und Chr$(13) sowie auf das Delimiterzeichen ";" gescannt werden, bevor ich den Datensatz in die CSV Datei schreiben kann. Schreibe ich nur die erste Spalte in die CSV Datei, benötigt die Funktion nur noch 8 Sekunden!

Grüße
Bernd

Tode:
Hast Du schonmal probiert, wie schnell ein GetItemValue gegenüber dem ColumnValues ist? Normalerweise ist der Zugriff auf den Index VIEL schneller, aber bei der Menge an Daten könnte der direkte Dokumentenzugriff vielleicht sogar gewinnen (obwohl ich in einem Fall, in dem es auch um Performance ging, festgestellt habe, dass GetItemValue eine sehr teure Operation ist)...

Ralf_M_Petter:

--- Zitat von: Legolas am 18.07.16 - 11:04:08 ---Hallo Zusammen,

hier nun die angekündigt Rückmeldung:

Die große Bremse beim Export ist das Auslesen der 159 Spalten mit der Methode "viewentry.ColumnValues(iCols)". Diese benötigt mit Abstand die meiste Zeit. Zudem muss dann noch der Inhalt auf Chr$(10) und Chr$(13) sowie auf das Delimiterzeichen ";" gescannt werden, bevor ich den Datensatz in die CSV Datei schreiben kann. Schreibe ich nur die erste Spalte in die CSV Datei, benötigt die Funktion nur noch 8 Sekunden!

Grüße
Bernd

--- Ende Zitat ---

Äh du machst aber nicht wirklich viewentry.ColumnValues(iCols) in deinem Code, oder?. viewentry.ColumnValues gibt dir doch ein Array zurück, dass du natürlich zwischenspeichern solltest und nicht immer wieder über das API holen solltest. Wenn du Glück hast, cached der API Aufruf auch, ich würde mich aber nicht darauf verlassen.

Wenn du maximale Performance willst, dann solltest du die View auf Autoupdate false setzen und dann beim NotesViewNavigator den BufferMaxEntries auf 200 setzen. Das sollte das Auslesen der View sehr stark beschleunigen. Noch weitere Performance könnte es bringen, wenn du von Lotusscript auf einen Javaagenten umsteigst.

Der Code sollte dann ungefähr so aussehen.


--- Code: ---Dim varTest as Variant
Dim viwTest as NotesView
Dim vec as NotesViewEntryCollection
Dim viwNav as NotesViewNavigator

Dim ve as NotesViewEntry

Dim dblStart as Double
Dim varX as Variant

dblStart = Now
Set viwTest = g_dbFocus.GetView( "($All)" )
viwTest.autoupdate=false
Set viwNav = viwTest.CreateViewNav
viwNav.buffermaxentries=200
Set ve= viwNav.GetFirst()
While not ve is Nothing
  varX = ve.ColumnValues()
  Set ve = viwNav.GetNext(ve)
Wend
Messagebox Now - dblStart  
--- Ende Code ---


Grüße

Ralf

Ralf_M_Petter:
Habe es schnell mal ausprobiert, die Variante mit den gesetzten Buffermaxentries benötigt bei einer Demodatenbank von mir 2,8 Sekunden und ohne Buffermaxentries benötigt es 74,6 Sekunden. Also eine beinahe unglaubliche Performancesteigerung mit einer simplen Änderung. Weil es mich interessiert probiere ich jetzt auch nicht wie sehr sich das mit der ungünstigen Verwendung des Arrays auswirkt.

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln