Hi,
ich habe mal die Zugriffszeiten einer Remote Java-Anwendung gegen meinen häuslichen Notes-Server gemessen.
Lotus-Script sollte sich ähnlich verhalten.
Die ersten beiden sind selbsterklärend.
Daten V_MP ist das holen einer View, daraus eine Collection, dann ein iterieren über z. Zt. 6 Dokumente und das Schreiben von so ermittelten Daten an jeweis die Stelle [n][0] eines Multi-Dimensionalen Arrays sowie erzeugen einer java.util.HashMap und dessen Befüllen (pro Dokument ein Entry).
Rest ist nochmal sowas in der Art von Daten_VMP aber mit nur 0-2 Dokumenten + wesentlich mehr Operationen mit get() auf java.util.HashMap, weiteres Befüllen des Multi-Dimensionalen Arrays. Teilweise gibt es in den NotesCollection mit dem jeweiligen key keine Daten (Erklärung von 0 Sekunden).
Die einzelnen Aufrufe finden immer wieder neu statt.*
Aufruf 1:
NotesFactory.createSessionWithFullAccess("kennwort") dauerte 0,187 Sekunden
nSession.getDatabase (serverName, serverPath) dauerte 0,234 Sekunden
Daten V_MP dauerte 0,079 Sekunden
Rest dauerte 0,015 Sekunden
Aufruf 2:
NotesFactory.createSessionWithFullAccess("kennwort") dauerte 0,016 Sekunden
nSession.getDatabase (serverName, serverPath) dauerte 0,094 Sekunden
Daten V_MP dauerte 0,015 Sekunden
Rest dauerte 0,016 Sekunden
Aufruf 3:
NotesFactory.createSessionWithFullAccess("kennwort") dauerte 0,016 Sekunden
nSession.getDatabase (serverName, serverPath) dauerte 0,093 Sekunden
Daten V_MP dauerte 0,016 Sekunden
Rest dauerte 0,016 Sekunden
Aufruf 4:
NotesFactory.createSessionWithFullAccess("kennwort") dauerte 0,015 Sekunden
nSession.getDatabase (serverName, serverPath) dauerte 0,125 Sekunden
Daten V_MP dauerte 0,016 Sekunden
Rest dauerte 0,047 Sekunden
Aufruf5:
NotesFactory.createSessionWithFullAccess("kennwort") dauerte 0,015 Sekunden
nSession.getDatabase (serverName, serverPath) dauerte 0,094 Sekunden
Daten V_MP dauerte 0,031 Sekunden
Rest dauerte 0 Sekunden
Was mir nun so bewußt geworden:
- Die bei weitem kostspieligste Operation ist stets das Holen des NotesDatabase-Objekts.
- Die Session wird offenbar irgendwo in Notes gecacht (erster Aufruf dauert länger und in meinem Code wird es (noch) nicht gecached.
- Iterieren über die View ist nicht so kostspielig (Optimierungsmöglichkeiten mglchws über NotesViewEntry (oder so ähnlich).
In Java kann ich sowas ganz einfach basteln rund um die Funktion System.currentTimeMillis() oder so ähnlich.
Werd die Klasse noch verbessern, mit Log4U integrieren und ins "Java für Anfänger" posten.
FRAGE1: Ich habe jetzt keine Zeit in der Doku nachzuschlagen. Kann man sowas auch mit LotusScript machen? Wenn ja, warum habe ich das nie gemacht?
FRAGE2: Warum ist das Holen der NotesDatabase so kostspielig?
Ist es der SicherheitsCheck innerhalb von Notes?
Ist das Objekt so groß?
Es ist jeweils der erste Zugriff auf den Server. Ist das vielleicht kostspielig?
FRAGE3: Der NotesServer ist natürlich sehr nah an dem Client (beides auf 1 Rechner). Gibt es irgendwelche Tools, womit ich den LoopBackAdapter von Windows ausbremsen kann, um es Kunden-realistischer zu machen?
--------------------
* hat was damit zu tun, dass ich vor der großen Multithreading-Programmierungs-Offensive meine NotesConnection-Klasse mehrfach gebrauchte Objekte wie Notes-Datenbanken oder Sessions nicht in Status-Variablen ablegen kann)