Jo, ich habe jetzt mal ein wenig getestet mit der NotesNoteCollection. Keine Ahnung, warum ich die nicht eher in Betracht gezogen habe. Das Brett ?
Quick and dirty habe ich mal zum Testen folgendes zusammengeschustert:
Dim session As New NotesSession
Dim dbMail As New NotesDatabase ("", "")
Dim nc As NotesNoteCollection
Dim szNoteID As String
Dim docDesign As NotesDocument
Dim iLoop As Integer
Dim szMessage As String
Dim vStartTime As Variant
Dim vEndTime As Variant
Call dbMail.OpenMail
vStartTime = Now
Set nc = dbMail.CreateNoteCollection (False)
Call nc.SelectAllIndexElements (True)
nc.SelectFolders = True
Call nc.BuildCollection
szNoteID = nc.GetFirstNoteId
For iLoop = 1 To nc.Count
Set docDesign = dbMail.GetDocumentByID (szNoteID)
If Instr (docDesign.~$Flags (0), "F") > 0 Then
szMessage = szMessage & docDesign.~$Title (0) & Chr$ (10)
End If
szNoteID = nc.GetNextNoteId (szNoteID)
Next
vEndTime = Now
Msgbox "Elapsed time: " & Cdat (vEndTime - vStartTime) & " to retrieve " & Cstr (nc.Count) & " elements."
Messagebox szMessage,, "Gefundene Folder"
Ich komme jetzt auf Werte, die etwas besser als mit API / Damien Katz' DBDesign Class sind. Hauptsächlich geschuldet ist dies der Tatsache, dass
nc.SelectFolders = True
Call nc.BuildCollection
entgegen der Benamsung doch nicht nur Folder zurückgibt, sondern auch Ansichten. Der erste Massage-Kiste im Code gibt daher auch einen Wert aus, der nicht mit der dann angezeigten Anzahl an Folders übereinstimmt.
Ich werde mit also die bereits funktionierende Variante (API) aufheben (wegen der R5-Kompatibilität) und jetzt mal schauen, ob ich das mit der NotesNoteCollection noch verfeinern kann.
Wegen der View mit Design-Elementen: Das kann ich partout nicht einsetzen, da ich von DB A auf beliebige DB B oder C oder ... zugreife und dort das Design nicht beeinflussen kann / will.
Jede weitere Idee ist herzlich willkommen (API ?) ! Und ich werde posten, wenn ich noch eine signifikante Performanceverbesserung hinbekomme.
Bernhard
Jo, Matthias, Du hast mir da ein wichtiges Stichwort geliefert.
Ich erreiche nochmals eine Performanceverbesserung von 25% und eine Halbierung der übertragenen Datenmenge, wenn ich die NotesNoteCollection auch korrekt verwende (wie vorhin schon gesagt: Der erste Entwurf war ausdrücklich "quick and dirty" zur Abschätzung der Dimensionen):
Set nc = dbMail.CreateNoteCollection (False)
nc.SelectFolders = True
Call nc.BuildCollection
Dann habe ich (logischerweise) wirklich nur noch die Folders drin.
Hier mal ein paar Zahlen, um die Verfahren besser zu verstehen (ich habe sado-mado-mässig meinem Domino-Server auch eine 22 MBit-WLAN-Karte spendiert, um in meiner Entwicklungsarbeit auch langsame Reaktions- und Übertragungszeiten "simulieren" zu können):
NotesDatabase.Views und Zugriff auf meine Mail-DB: 1,4 MB, 17 Sekunden (incl. Ausfiltern der Views)
Damien Katz' DBDesign: 1,3 MB, 5 Sekunden
NotesNoteCollection: 0,7 MB, 3..4 Sekunden.
Ergo: Wenn es nicht auf R5-Kompatibilität ankommt, ist man mit der NoteDocumentCollection bestens bedient.
@Ulrich: Danke für Deine Bestätigung, dass sich mit der C++-API die Katze letztlich doch wieder in den Schwanz beisst. Dies bestätigte meine Ahnung.
Bernhard