Domino 9 und frühere Versionen > Entwicklung

Collection 2 mal durchlaufen !?

<< < (4/5) > >>

ata:
@Pasquale

könnte es an deinem key$ liegen, wenn er zum Beispiel leer war?

ata

Rob Green:
genauer betrachtet hängt das ja von 2 Faktoren ab, wenn es um die Frage geht "nehm ich gextnext oder getnth".

1. While gegen For Loop
2. Arbeitsweise von getnth und getnext

While ist langsamer als For, da ja eben der Check bei jeder While Durchlaufchleife jedesmal gemacht wird, wohingegen bei For die Anzahl der Iterationsschritte bekannt ist bzw. lediglich die maximale Iterationsanzahl überprüft wird. An sich liegt der Unterschied wohl noch  tiefer betrachtet in der C Denkweise von Notes, was letzten Endes den Unterschied beider Methoden ausmacht, wie der RAM angesprochen wird. Das dürfte wohl ein gewiefter C Developer erklären können (oder ist Notes in C++ geschrieben?).

Gnth allerdings hebelt mE den Vorteil einer For SChleife komplett aus, da es dafür bekannt ist, jedes Doc intern  i++ Iterationsschritte und damit bei jedem Step zu durchlaufen, bis es das n-te Doc endlich refenziert. Im Gegensatz zum getnextdocument, das in der Coll sogleich zum nächsten Doc aus der Collection springt.

Wir hatte vor 2-3 Jahren mal intern Tests gemacht und es war wirklich so, daß eine NotesDocumentCollection mit einer For und GetNth Schleife super mega langsam war im Gegensatz zu einer While Getnext Schleife.

Doch natürlich gibt es Ausnahmen davon und manchmal kann man ja auch nicht anders, als ein getnth zu wählen. Zumal es ideal ist, wenn man weiß, wo man in einer Coll zu springen hat. Dann wäre getnext total deplaziert.

Glombi:
@Don Pasquale:
Also, wenn ich das richtig verstanden habe, baust Du die 2. Collection auf, um das Backend-Dokument von uidoc noch zu bekommen. Du könntest dieses aber einfach zur Collection hinzufügen:

...
call uidoc.Save(...)
set doc = uidoc.Document
call uidoc.Close
Call dc.AddDocument( doc )

...
hier dann weiter mit (ehemals 2. Collection)
set doc = dc.GetFirstDocument

Das ganze

Glombi:
@All:
Wegen der Performance:
GetNthDocument sollte unbedingt vermieden werden, wenn man nicht explizit das n-te Dokument aus einer Colletion holen will.

Einige Tipps zum Thema Performance gibt's hier:
http://www.martinscott.com/Site/DesignLibrary.nsf/Papers/Performance

Gruß
Andreas

Don Pasquale:
@Glombi

Danke für Deinen Hinweis, bin mir aber nicht sicher ob wir uns richtig verstanden haben.

Ich durchlaufe alle Dokumente einer Kategorie, weil  in einem Dokument bereits ein Bearbeiter stecken könnte.
Dann werden alle Dokumente nochmal durchlaufen
und der Wert Bearbeiter wird entweder mit dem
neuen Wert besetzt, oder dem Wert, den ich im 1. Durchlauf gefunden habe.

Der 2. Durchlauf benötigt das refresh, weil ich der View ja ein neues Dokument hinzugefügt habe.

Falls das nicht der Grund sein sollte, zumindest funktionert es jetzt mit dem Refresh in allen Fällen und nicht nur in jedem 5 Versuch.


Ciao

Don Pasquale

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln