Autor Thema: Performance  (Gelesen 10903 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Performance
« am: 09.04.04 - 19:54:22 »
Ich starte mal einen Thread bezüglich Performance in Lotus Notes.

Anlass ist u.a. dieser Thread:
http://www.atnotes.de/index.php?board=9;action=display;threadid=15109


Heute habe ich mich gefragt, ob es performance-seitig einen Unterschied macht, ob man Dokumente einer View
a) über NotesViewNavigator
oder
b) über NotesViewEntryCollection
abarbeitet.

Code-Auszug für a):
Dim nav As NotesViewNavigator
Set nav= view.createViewnav()
Set viewentry=nav.GetFirstDocument
Do While Not (viewentry Is Nothing)
   (......)
   Set viewentry = nav.getnextdocument(viewentry)
Loop


Code-Auszug für b):
Dim vc As NotesViewEntryCollection
Set vc = view.AllEntries
Set viewentry = vc.GetFirstEntry()
Do While Not (viewentry Is Nothing)
   (......)
   Set viewentry = vc.GetNextEntry(viewentry)
Loop


Testumgebung:
- Athlon 2600 XP, 512 MB RAM
- Windows XP
- Notes 5.011 LOKAL
- 5.000 Dokumente, die in Excel exportiert werden

Ergebnis:
Ich habe exakt diesselbe Zeit gestoppt bei (a) und (b): 55,2 Sekunden.

Fazit:
Kein Unterschied. Es obliegt also der Entwickler-Freiheit, mit was man lieber arbeitet :-)

Matthias
« Letzte Änderung: 09.04.04 - 19:56:11 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Performance
« Antwort #1 am: 09.04.04 - 20:02:37 »
Noch ein Test: Variablen-Deklaration:

Ich habe im selben Script Option Declare ausgeschaltet und 12 Variablen-Deklarationen (Für Integer und String) auskommentiert.

Hier habe ich nur mit 1000 Dokumenten getestet.

Fazit:
Deklarierte Variablen: 12,1 Sekunden
Nicht deklarierte Variablen: 12,4 Sekunden

Matthias
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Performance
« Antwort #2 am: 09.04.04 - 20:04:59 »
Wenn Du schon dabei bist, Matthias, probiere das doch mal mit
NotesView.GetFirst/NextDocument

Da das ja die variante ist, um noch mehr Infos aus Docs in Views zu bekommen, als in der View stehen, wäre der Vergleich wirklich sehr interessant. IMHO sollte da die Performance sogar noch besser sein.

Es kommt aber natürlich immer auch darauf an, was "zwischen den Zeilen" steht, also, was zwischen der Bearbeitung zwischen Doc N und Doc N+1 passiert.

Sehr gespannt,
Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Performance
« Antwort #3 am: 09.04.04 - 20:19:13 »
Hier kann ich leider in dem o.g. Testszenario keinen Vergleich liefern, Bernhard, da ich hier mit NotesViewEntry arbeite, und hier in diesem Test mit doc nichts anfangen kann.

Wobei: Intuitiv hätte ich eh mit NotesView.GetFirst/NextDocument gearbeitet, wenn ich das Dokument selbst brauche.

Mal sehen, wenn ich Lust habe, mache ich es umgekehrt, und setze ein Testscript um, um das Viewentry in das doc zu kriegen (und da dann irgendwas damit zu machen).
Dann hätte man was zu vergleichen.....

Matthias

P.S. hochinteressant das Thema  :)
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Performance
« Antwort #4 am: 09.04.04 - 22:00:26 »
Ich habe mal in einer Applikation das GetDocument durch das Durchwandern der EntryCollection ersetzt, da die Entry-Collection nur den Index, nicht jedoch die Dokumente zieht, ist die EntryCollection    d e u t l i c h   schneller, die genauen Daten habe ich nicht mehr, aber das war eine Performance-Verbesserung von 2,5 Std. auf 0,5 Std. herunter. Das Anziehen der Notes-Dokumente scheint enorm teuer zu sein.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Performance
« Antwort #5 am: 09.04.04 - 22:04:13 »
Nun doch noch ein Vergleich.

Der Vergleich basiert auf
a) NotesViewEntryCollection
b) NotesViewNavigator
c) NotesDocumentCollection

In (a) und (b) wird jeweils eine View bearbeitet, in (c) alle Dokumente der DB.

Unten angehängt eine Beispiel-DB. Da es hier nur 1 View gibt und keine weiteren Doks, werden mit allen 3 Beispielen dieselbem Doks abgearbeitet.

Testen kann nun jeder selbst.
Ich empfehle, per Copy & Paste mehrere 1000 Dokumente zu erstellen, ich habe mal 50.000 erstellt zum testen.

Mein Fazit: (c) war am schnellsten.

Matthias


*Edit*

Ach ja: Aufrufen kann man die einzelnen Scripts in der View über den Button "Neuer Nachname".
« Letzte Änderung: 09.04.04 - 22:06:49 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re:Performance
« Antwort #6 am: 09.04.04 - 22:12:17 »
Interessant, da scheinen die verschiedensten Einflüsse zu gelten, wie zum Beispiel, ob es Differenzen zwischen AllDocuments der DB und dem Durchwandern einer View gibt. Bin nicht mehr sicher, ob ich damals die Dokumente über eine Collection bekommen habe oder anders. Das Problem der Collection gegenüber ViewEntryCollection ist in der Regel die fehlende Sortierung.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Performance
« Antwort #7 am: 09.04.04 - 22:16:05 »
Jo, ich bin gespannt, ob wir es schaffen, einen "Leitfaden" zu erstellen für Entwickler der vieles abdeckt  :D

Das Ergebnis wäre vielleicht eine Matrix / Tabelle.....

Muss ja kein Schnellschuss werden, und alles kann man nicht auf einmal abdecken.

Bin weiter hochinteressiert  :)

Interessant fand ich auch das Ergebnis der (Nicht-)Deklaration von Strings etc.

Ein weiterer Grund also, Option Declare einzusetzen :-)

Matthias
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Performance
« Antwort #8 am: 09.04.04 - 22:26:37 »
Hier noch - zur Ergänzung erwähnt - das Performance-Kapitel in der Schleifenkunde:

http://www.atnotes.de/index.php?board=26;action=display;threadid=13504

Siehe da Kapitel 9 .....
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Performance
« Antwort #9 am: 09.04.04 - 23:20:55 »
Ein weiterer interessanter Test:

Ist ein @ReplaceSubstring in Script schneller als ein Evaluate ?

Zum testen siehe unten das Attachment.

Ich habe noch keinen Stoppuhrtest gemacht, aber subjektiv war das Script schneller (!!).

Matthias
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Performance
« Antwort #10 am: 09.04.04 - 23:34:26 »
Ich steig' da morgen ein ! Habe auch ein paar nette richtig grosse "on the wild"-Datenbanken.
Evaluate vs. pure script - auch ein nettes Kapitel.
Ohne jetzt hineingeschaut zu haben (sorry !), befürchte ich aber, dass das LS-Äquivalent von @ReplaceSubstring wieder die "Arme-Leute-Variante" ist, die dann natürlich weniger zu tun hat.

Also: Morgen weiter ! Bei mir wartet gerade noch ein Stapel Arbeit - da gibt es Kunden, denen auch das Osterfest nicht heilig ist ;-)

Ciao,
Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Performance
« Antwort #11 am: 10.04.04 - 13:04:55 »
Zitat
Ohne jetzt hineingeschaut zu haben (sorry !), befürchte ich aber, dass das LS-Äquivalent von @ReplaceSubstring wieder die "Arme-Leute-Variante" ist, die dann natürlich weniger zu tun hat.
Ähm, jo, richtig geraten (nur für String und nicht Array).
Ich habe jetzt noch einen weiteren ReplaceSubstring eingebaut, Quellcode ist von Dir Bernhard, siehe http://www.atnotes.de/index.php?board=11;action=display;threadid=12267

Getestet habe ich jetzt mit 5.000 Dokumenten. Ich habe einen Satz mit ca. 150 Wörtern in das Feld Nachname kopiert. Dann habe ich ein Wort mit 10 Buchstaben, welches im hinteren Drittel des Textes ist, jeweils ersetzen lassen.

Ergebnis:
- Replace Substring (String-basierend): 12 Sekunden
- Replace Substring (Array-basierend): 12 Sekunden
- @ReplaceSubstring mit Evaluate: 15 Sekunden

Matthias

** EDIT **
Unten die aktuelle DB
« Letzte Änderung: 10.04.04 - 13:10:47 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
« Letzte Änderung: 10.04.04 - 13:46:38 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Performance
« Antwort #13 am: 10.04.04 - 14:09:20 »
Zitat
Ähm, jo, richtig geraten (nur für String und nicht Array).
Ich habe jetzt noch einen weiteren ReplaceSubstring eingebaut, Quellcode ist von Dir Bernhard ...

Ergebnis:
- Replace Substring (String-basierend): 12 Sekunden
- Replace Substring (Array-basierend): 12 Sekunden
- @ReplaceSubstring mit Evaluate: 15 Sekunden

Das muss ich ja ganz geschickt programmiert haben, wenn die komplexe Routine so fix ist wie die simple  ;D

Bernhard

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re:Performance
« Antwort #14 am: 10.04.04 - 14:38:09 »
Stimmt  :D

Dein Code hat (ohne Comments, Leerzeilen etc.) 123 Zeilen, der String-basierende 6 Zeilen  ;D
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Performance
« Antwort #15 am: 24.11.04 - 21:18:52 »
Ist zwar schon ein älterer Thread, aber ich hänge hier mal 2 Links rein zum Thema @Formula-Performance.

Damien Katz:  Formula Language's dirty secret (build a list using the list concatenation operator)

Lotus Geek: Ergänzungen zu Damien's Artikel

 
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz