0 Antworten bei 23x angeschaut könnte aussagen, dass mein Ansatz so schlecht nicht ist.
Nachdem ich alle Docs in einen Folder packe mache ich
folder.AutoUpdate=False
folder.refresh
und nach jedem abgearbeiteten Dokument
doc.RemoveFromFolder
folder.refresh
Ist das sinnvoll und bringt Performance oder ist das eher O0 und tut das gleiche wie Autoupdate = true ?
Naja, schaun mer mal am Montag
ich habe die Autoupdate-Geschichte mal mit LSTimer gemessen. Es waren nur 2 Messungen, die Ergebnisse waren aber so ähnlich, dass die Autoupdate-Geschichte mir irrelevant zu sein scheint:
Zum Vorgehen: Ich schiebe alle vorhandenen Dokumente in einen Update-Ordner, vergleiche jedes Dokument mit einem Datensatz und entferne dieses Dokument dann aus dem Update-Ordner. In meinem Test hatte ich ca 400 Dokumente. Die Zeiten für das Aktualisieren waren etwa identisch, etwas kürzer beim Lauf MIT manuellem Refresh (49000ms +-1000ms). Ich habe den Agenten lokal gestartet, das DBDirectory liegt auf dem Server. Das Caching kann natürlich hier was verfälschen (allerdings kann ein view.refresh wohl nicht aus dem Cache kommen, oder?)
Lange Rede, kurzer Sinn: Zum einen scheint das manuelle Refresh nicht notwendig zu sein, da das Ergebnis gleich ist, zum anderen sind die Zeiten bei meinen Datenmengen etwa gleich. Unten seht ihr den relevanten Code des Agenten:
Set session = New NotesSession
Set dbThis = session.CurrentDatabase
Set docProfile = dbThis.GetProfileDocument(SETUP_PROFILE)
Set vAllDocs = dbThis.GetView(VIEW_ALL_DOCS)
Set vecAllDocs = vAllDocs.AllEntries
Set vUpdateFolder = dbThis.GetView(UPDATE_FOLDER)
Call openProtokoll("Abgleich der Abrechnungsdaten")
vUpdateFolder.AutoUpdate = False
vUpdateFolder.Refresh
'Put all docs into update folder
Call vecAllDocs.PutAllInFolder(UPDATE_FOLDER)
If (docProfile Is Nothing) Then
Call LogErrorEx("Profile " & SETUP_PROFILE & " doc not found.", 2, Nothing)
Exit Sub
End If
If (docProfile.HasItem(SERVERLIST)) Then
varServers = docProfile.GetItemValue(SERVERLIST)
lngDBCount = 0
Forall srv In varServers
Set dbDir = New NotesDbDirectory(srv)
Set db = dbDir.GetFirstDatabase(DATABASE)
While Not db Is Nothing
lngDBCount = lngDBCount + 1
Print Cstr(lngDBCount) + " - " + db.Title
'get corresponding doc
strKey = db.ReplicaID
Set doc = vUpdateFolder.GetDocumentByKey(strKey, True)
If (doc Is Nothing) Then
Call createDoc(db)
lngNewCount = lngNewCount + 1
Else
Call updateDoc(db)
Call doc.RemoveFromFolder(UPDATE_FOLDER)
vUpdateFolder.Refresh
lngUpdateCount = lngUpdateCount + 1
End If
Set db = dbdir.GetNextDatabase()
Wend
End Forall
'the remaining docs in update folder have to be marked as deleted
Set vecRemainingDocs = vUpdateFolder.AllEntries
lngDelCount = vecRemainingDocs.Count
Call vecRemainingDocs.StampAll(STATUS_FIELD, DELETED_STATUS)
Call vecRemainingDocs.RemoveAllFromFolder(UPDATE_FOLDER)
End If