Domino 9 und frühere Versionen > ND9: Entwicklung

Performance-Vorteil bei CurrentDatabase?

(1/1)

buzzy666:
Hi zusammen,

weiss jemand, ob es Performance-Vorteile bei der Verwendung einer via

     Set notesDatabase = notesSession.CurrentDatabase

gesetzen DB gegenüber einer via

     Set notesDatabase = New NotesDatabase( server$, dbfile$ )

gesetzen gibt?

Speziell im Hinblick auf die Verwendung von GetDocumentByKey etc.


Danke & Gruß,
Buzzy

Tode:
Mit diesem Script kannst Du das ganz einfach selbst messen:


--- Code: --- On Error GoTo ErrorRoutine
'===================================================================================================================================
Dim ses As New NotesSession

Dim db1 As NotesDatabase
Dim db2 As NotesDatabase

Dim strServer As String
Dim strDb As String

Dim dblStart As Double
Dim dblEnd As Double

Dim dblTime1 As Double
Dim dblTime2 As Double

Dim dblTicsPerSecond As Double

dblTicsPerSecond = GetThreadInfo( LSI_THREAD_TICKS_PER_SEC )

strServer = ""
strDb = "apps\Tli\Test.nsf"

dblStart = GetThreadInfo(LSI_THREAD_TICKS)
Set db1 = ses.Currentdatabase
dblEnd = GetThreadInfo(LSI_THREAD_TICKS)

dblTime1 = dblEnd - dblStart
Print "Time 1: " & CStr( dblTime1 ) & " = " & CStr( dblTime1 / dblTicsPerSecond ) & " sec"

dblStart = GetThreadInfo(LSI_THREAD_TICKS)
Set db2 = New NotesDatabase( strServer, strDb )
dblEnd = GetThreadInfo(LSI_THREAD_TICKS)

dblTime2 = dblEnd - dblStart
Print "Time 2: " & CStr( dblTime2 ) & " = " & CStr( dblTime2 / dblTicsPerSecond ) & " sec"
'===================================================================================================================================
EndOfRoutine:
Exit Sub
ErrorRoutine:
Print Error & " in line " & Err
Resume EndOfRoutine
--- Ende Code ---

Wenn Du ganz sicher sein willst, dass nicht caching Deine Ergebnisse verfälscht, machst Du halt zwei Agenten, bei denen einmal über CurrentDatabase und einmal über open geöffnet wird...

In meiner Messung mit einer recht grossen Datenbank habe ich tatsächlich einen signifikanten Unterschied festgestellt:

ses.CurrentDatabase = 0 Tics / 0 sec
New Database = 16 Tics / 0,16 sec

Ist auch logisch: Denn ses.CurrentDatabase ist ja schon als Objekt da und wird nur der Variable zugewiesen, während New tatsächlich ein neues Objekt erstellt.

Ob es Sinn macht, sich um diese 0,16 sec Gedanken zu machen... Es gibt sicher schlimmere Performance- bremsen.

Andrew Harder:
Möchte ich gerne noch ergänzen :)

Die NotesSession und die CurrentDatabase ist immer schon da. Das schreibt IBM eigendlich in jede Anleitung bezüglich Performance mit rein.

Eine andere Datenbank zu öffnen heisst:
- auf Server zugreifen
- Server greift auf Platte zu
- öffnen der Datenbank selbst (erst hier werden einige Objekte initialisiert).

Aber wie oben schon geschrieben wurde, das sind paar ms.

Auf GetDocumentByKey sebst hat dies keine Auswirkungen.
Die Ansicht auf die man das ausführt kann hier aber erhebliche Auswirkungen haben, besonders wenn man mehrere lookups ausführt.

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln