Autor Thema: Performance-Vorteil bei CurrentDatabase?  (Gelesen 2183 mal)

Offline buzzy666

  • Aktives Mitglied
  • ***
  • Beiträge: 177
  • Ich liebe dieses Forum!
Performance-Vorteil bei CurrentDatabase?
« am: 12.01.15 - 15:50:07 »
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

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.896
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: Performance-Vorteil bei CurrentDatabase?
« Antwort #1 am: 12.01.15 - 16:54:28 »
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

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.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Andrew Harder

  • Senior Mitglied
  • ****
  • Beiträge: 295
  • Geschlecht: Männlich
Re: Performance-Vorteil bei CurrentDatabase?
« Antwort #2 am: 12.01.15 - 21:30:44 »
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.
Andy

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz