Ich habe mehere Macros die viele Datenbankabfragen durchführen und auswerten!
Mein Problem: Der Arbeitsspeicherverbrauch von soffice.bin steigt bei der Ausführung des Macros (gefühlt mit jeder SQL-Abfrage) an und auch wenn man das Macro neu startet wird der Speicherverbrauch nicht weniger sonder steigt mit jeder Ausführung weiter an. Bis um die 600 MB verbraucht sind, dann steigt OOo teilweise ohne Fehler einfach aus. (oder z.B. [msci_uno bridge errer] UNO type of C++ exception unknows: "std.bad_alloc", RTTI-name=".=AVbad_alloc@std@@"!.) bei 675.196k
Kann man OO dazu bringen beim starten eines Macros den Speicher zu leeren oder zwischendurch Variablen zu leeren um den Speicherverbrauch einzugrenzen ?
Mein System: WinXp 32Bit, OOo 3.2.1 und LibreOffice 3.3.0
Code: Alles auswählen
Codeteile:
' Datenbank registrieren
oBaseContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
sName = "file://xxx.odb"
if oBaseContext.hasByName("xxx") then oBaseContext.revokeObject("xxx")
oDataSource = oBaseContext.getByName(sName)
oBaseContext.registerObject("xxx", oDataSource)
oDatenbankKontext = CreateUnoService ( "com.sun.star.sdb.DatabaseContext" )
oDatenquelle = oDatenbankKontext.getByName( "xxx" )
oDatenquelle.setLoginTimeout( 10 ) ' sekunden
oVerbindung = oDatenquelle.getConnection( "xxx", xxx )
' DB Abfragen
sSQL = "select xxx "
oStatement = oVerbindung.createStatement()
oResultSet = oStatement.executeQuery( sSQL )
While oResultSet.Next()
xxx = val(oResultSet.getString(1))
usw.
Wend
oResultSet.close()
oStatement.close()
' DB wieder rauslöschen
if oBaseContext.hasByName("xxx") then oBaseContext.revokeObject("xxx")
Mir kommt es so vor, das er die Rückgaben der Datenbankabfrage also o.ResultSet im Speicher behält.
Danke schon mal im Vorraus.
Bernhard