Das Notes Forum

Domino 9 und frühere Versionen => ND9: Entwicklung => Thema gestartet von: etofi am 22.10.18 - 14:48:13

Titel: VBA COM Anbindung wird immer langsamer
Beitrag von: etofi am 22.10.18 - 14:48:13
Hallo zusammen,

ich lese ca 7.000 Datensätze mit 70 Feldern in VBA über COM Anbindung ein und schreibe jedes Dokument in eine Access Tabelle weg.

Die Session erstelle ich folgendermaßen:

Code
'Starten einer  Notessession
Set objNotes = New NotesSession
objNotes.Initialize
     
Am Anfang geht das recht zügig aber je mehr Sätze eingelesen werden desto langsamer wird es.
Woran kann das liegen? Gibt es nen Befehl mit dem ich nach jedem Datensatz Cache oder vergleichbares freigeben kann damit es gleichbleibend schnell läuft?

Grüße
Eric
Titel: Re: VBA COM Anbindung wird immer langsamer
Beitrag von: Tode am 22.10.18 - 15:02:07
Ich vermute mal schwer, dass es NICHT an der Schnittstelle liegt, sondern am umliegenden Code. Ihr habt nicht zufällig ein NotesDocumentCollection.GetNthDocument(x) im Code?

Das hat nämlich GENAU diese Auswirkung bei mehreren Dokumenten: Da steigt die Verarbeitungszeit gefühlt exponentiell an, je mehr Dokumente dazu kommen...
Titel: Re: VBA COM Anbindung wird immer langsamer
Beitrag von: jBubbleBoy am 22.10.18 - 15:02:45
unterdrücke mal die Ausgabe in Access durch:
Code
Application.Echo False
'-- Code / Felder schreiben
Application.Echo true
Titel: Re: VBA COM Anbindung wird immer langsamer
Beitrag von: etofi am 22.10.18 - 15:34:28
Ich vermute mal schwer, dass es NICHT an der Schnittstelle liegt, sondern am umliegenden Code. Ihr habt nicht zufällig ein NotesDocumentCollection.GetNthDocument(x) im Code?

Das hat nämlich GENAU diese Auswirkung bei mehreren Dokumenten: Da steigt die Verarbeitungszeit gefühlt exponentiell an, je mehr Dokumente dazu kommen...

Ne GetNthDocument habe ich nicht drin. Ich mache folgendes:

Code
'Verweisen auf die gewünschte Datenbank
	Set LNdb = objNotes.GETDATABASE(strServerName, strDBName)
	
	If Not LNdb Is Nothing Then
	
	    Set LNGefiltert = LNdb.SEARCH(strFilter, Nothing, 0)
	
	    If Not LNGefiltert Is Nothing Then
	    
	        'Einlesen des ersten Dokuments
	        Set LNDoc = LNGefiltert.GETFIRSTDOCUMENT
	            
	        While Not LNDoc Is Nothing
						
						HIER WERDEN DIE DATEN IN ACCESS WEGGESCHRIEBEN
								
						Set LNDoc = LNGefiltert.GETNEXTDOCUMENT(LNDoc)
	               
	        Wend
	        
		End if

	End if

Produziert das das gleiche Problem?
Wenn ja wie kann ich das umgehen?
Titel: Re: VBA COM Anbindung wird immer langsamer
Beitrag von: etofi am 22.10.18 - 15:39:56
unterdrücke mal die Ausgabe in Access durch:
Code
Application.Echo False
'-- Code / Felder schreiben
Application.Echo true

Ok ich versuche es mal und berichte ob es was bringt.
Titel: Re: VBA COM Anbindung wird immer langsamer
Beitrag von: Peter Klett am 22.10.18 - 15:53:57
Das Script sieht ja ganz gut aus. Wenn es immer noch nicht besser wird, würde ich den Teil auskommentieren, der die Daten schreibt.

Ist es dann immer noch langsam, liegt es am Lesen aus Notes, ist es dann schnell, liegt es am Schreiben in Access. Dann suchst Du zumindest in der Nähe des Problems.
Titel: Re: VBA COM Anbindung wird immer langsamer
Beitrag von: jBubbleBoy am 23.10.18 - 17:07:26
Vielleicht sind ja auch 7.000 Tabellen in Access einfach zu viel des Guten? Ich würde die Tabellen nach Dokumententyp/Form unterteilen, aber da ich deine Anforderungen nicht kenne ist es nur eine Idee ;)
Titel: Re: VBA COM Anbindung wird immer langsamer
Beitrag von: etofi am 23.10.18 - 17:08:36
Vielleicht sind ja auch 7.000 Tabellen in Access einfach zu viel des Guten? Ich würde die Tabellen nach Dokumententyp/Form unterteilen, aber da ich deine Anforderungen nicht kenne ist es nur eine Idee ;)

Sind ja auch nicht 7.000 Tabellen sondern eine Tabelle mit 7000 Datensätzen  ;)
Titel: Re: VBA COM Anbindung wird immer langsamer
Beitrag von: Gutierrez am 25.10.18 - 15:18:38
Hallo etofi,

wird in der Schleife NotesDocumentCollection.Count abgefragt? Verlangsamt auch. Einmal vorher in einer Variablen speichern.

Sonst in der Schleife evtl. Listen oder Objekte mit Listen, die nicht korrekt freigegeben werden?

Beste Grüße
Gutierrez
Titel: Re: VBA COM Anbindung wird immer langsamer
Beitrag von: etofi am 25.10.18 - 17:58:29
Hallo etofi,

wird in der Schleife NotesDocumentCollection.Count abgefragt? Verlangsamt auch. Einmal vorher in einer Variablen speichern.

Sonst in der Schleife evtl. Listen oder Objekte mit Listen, die nicht korrekt freigegeben werden?

Beste Grüße
Gutierrez

Ne das ist es nicht.

Das Script sieht ja ganz gut aus. Wenn es immer noch nicht besser wird, würde ich den Teil auskommentieren, der die Daten schreibt.

Ist es dann immer noch langsam, liegt es am Lesen aus Notes, ist es dann schnell, liegt es am Schreiben in Access. Dann suchst Du zumindest in der Nähe des Problems.

Der Hinweis war gut. Das eigentliche Auslesen geht sehr viel schneller wenn ich es ohne das Schreiben in die Access Tabellen mache.
Muss also am Schreibvorgang noch was optimieren.