Domino 9 und frühere Versionen > ND6: Entwicklung

Schneller(er) Zugriff auf Folder möglich ?

<< < (2/3) > >>

koehlerbv:
Merci beaucoup, Jens und Matthias und Ulrich. Ich bin dran an Matthias' Tip mit der NotesNoteCollection, aber bisher sieht es schlechter aus als bei dem API-Verfahren von Damien Katz.

Bernhard

koehlerbv:
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:


--- Code: ---
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"

--- Ende Code ---

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

eknori:
API habe ich abgecheckt:
in C++ gibt es ein LNDatabase::GetFolder.

C++ ist aber nur der wrapper der C API. Daher müsste man alle Befehle des GetFolder wieder aufdrösels; mit LS wrappen und  .. landet wieder bei Damien Katz' Lösung.

Also von daher sehe ich keine weiter Verbesserungsmöglichkeit.

Ausser, man bildet das als DLL ab.

TMC:
Evtl. kann man im oben geposteten Script noch andere Schleifen testen.
In der BP-Schleifenkunde wird in einem der letzen Kapitel auf Performance-Tests verwiesen.
Zumindest ein paar Millisekunden könnten drin sein  ;)

Ansonsten:

Vielleicht kann man mit den Methoden der NotesNoteCollection - Klasse noch was optimieren.

Ohne mir das jetzt die Klasse im Detail angesehen zu haben (ehrlich gesagt weiß ich jetzt nicht genau, was SelectAllIndexElements macht):

--- Zitat --- Call nc.SelectAllIndexElements (True)
nc.SelectFolders = True
Call nc.BuildCollection
--- Ende Zitat ---
Wie groß ist da die Collection? Sind da nur noch Folders drin oder alle Designelemente?

Falls alle Designelemente:
Ich machte bisher immer die Auswahl mit 'SelectAllDesignElements'.
Evtl. kann man dann nach und nach den Rest rauswerfen (also z.B. nc.SelectAllFormatElements = False, nc.SelectNavigators = False usw.).

Semeaphoros:

--- Zitat von: eknori am 20.12.04 - 18:27:17 ---Also von daher sehe ich keine weiter Verbesserungsmöglichkeit.

Ausser, man bildet das als DLL ab.

--- Ende Zitat ---

Das war, was ich von anfang an befürchtete

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln