Autor Thema: Performance-Vorteil bei CurrentDatabase?  (Gelesen 2132 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.883
  • 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