Das Notes Forum
Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: AleX_-_ am 15.01.13 - 11:18:56
-
Hallo zusammen,
kennt jemand eine Möglichkeit mit der man eine NotesDocumentCollection schneller durchloopen könnte?
Im Moment setzte ich immer folgendes ein:
Set nd = nc.Getfirstdocument()
While Not (nd Is Nothing)
...
Set nd = nc.Getnextdocument(nd)
Wend
Dies dauert bei 40.000 Dokumenten schon mal 3 Minuten.
Danke für die Hinweise
AleX
-
Woher kommt die Notesdocumentcollection?
-
Wenn die collection aus einer View kommt, nimm den ViewNavigator. Viel schneller, weil direkt auf die Werte in der View zurückgegriffen werden kann und nicht erst das Dokument "geöffnet" wwerden muss. Die Spalten müssen dann so aufgebaut werden, daß sie die gewünschten Werte enthalten.
-
An das habe ich auch gedacht.
Für ein Beispiel:
http://petterralf.blogspot.co.at/2012/04/peformance-trick-beim-durchlesen-von.html
-
Unsere Server schaffen in so einer Schleife ~300-600 Dokumente pro Sekunde.
40000/300 wären dann 133 sec. Was > 2 min entspricht und somit deinen Wert bestätigt.
Clients sind hier langsamer und hängen sehr stark von der Netzwerklatenz ab. (Über eine WAN Verbindung mit 40ms Ping Zeit schafft man nur noch in der Größenordnung von 10 Dokumenten)
und wie Ulrich schon schrieb ist der ViewNavigator hier deutlich schneller... so lange man nicht auf entry.document zugreift, sondern nur Spalten ausliest.
Achtung, Stolperfalle: die Rückgabe von "entry.columnvalues(x)" kann entwender ein skalarer Wert sein (wenn nur ein Wert in der Spalte steht) oder ein Array, wenn es sich um Mehrfachwerte handelt und auch tatsächlich mehr als ein Wert vorhanden ist.
Gruß
Roland
-
Danke für die Info. Das mit den NotesViewEntry war mir bereits bekannt.
Ich muss aber die Collection über '.search' laden, da ich ganz verschiedene Suchanforderungen auf die Datenbank habe.