Basic Dialog frisst Speicher

Alles zur Programmierung im OpenOffice.org
Antworten
CoDude
Beiträge: 2
Registriert: Fr 2. Dez 2016, 21:39

Basic Dialog frisst Speicher

Beitrag von CoDude » Fr 2. Dez 2016, 22:34

hallo Community,
ich habe eine Mitgliederverwaltung mit AOO 4.1.3 in Basic für meinen Verein entwickelt. Die Anwendung startet mit einem Haupt-Dialog der nach Instanzierung ein Calc-Doc (mit derzeit 10 sheets) lädt wo die ganzen Daten gespeichert sind (ich will absichtlich keine Datenbank). Läuft auch soweit bestens, nur habe ich jetzt bei einem Intensiv-Test festgestellt, daß schon beim einfachen vorwärts-blättern zum nächsten Mitglied die Speicherbelegung rapide hoch geht. Bei derzeit 500 Test-Mitgliedern kann ich das doc ca. 1,5 mal durchblättern, dann ist mein Speicher bei ca. 2.7 GB belegt und unter Windows 7 verabschiedet sich OO einfach lautlos. Unter Ubuntu 16.04 laufen die gleichen Macros und hier kommt es dann zum System-freeze (logisch). Ich habe einen Laptop mit 3 GB RAM auf dem ich Win 7 und Ubuntu 16.04 installiert habe.
Ich weiß, das ist ein extrem-Test, aber es sieht für mich so aus, als ob OO nicht mehr benötigte Objekte nicht aufräumt, bzw. Dialog-Objekte immer wieder neu anlegt, und sich deshalb hochschaukelt (reine Vermutung!)
Da die Anwendung später auf einem kleineren Laptop mit max 2GB RAM unter Ubuntu laufen soll möchte ich das Problem gerne irgendwie lösen wenn es denn möglich ist. Die OO-Einstellungen zu ändern hat nicht geholfen. Selbst bei vorzeitigem Beenden der Anwendung bleibt die bis dahin erreichte Speicherbelegung erhalten und geht erst zurück wenn ich den noch laufenden soffice Prozess beende.
Weiß hierzu jemand einen Rat? Muß ich vielleicht in der JVM eine Einstellung vornehmen - hier habe ich seit Installation von jre 8 nichts verändert.
Vielen Danke im Voraus für jeglichen Tipp,
mfG, CoDude

F3K Total
Beiträge: 788
Registriert: Mo 1. Aug 2011, 00:03

Re: Basic Dialog frisst Speicher

Beitrag von F3K Total » Sa 3. Dez 2016, 01:42

Moin,
schreibe ans Ende der Routine die den Dialog oDialog aufruft:

Code: Alles auswählen

oDialog.dispose
Gruß R

CoDude
Beiträge: 2
Registriert: Fr 2. Dez 2016, 21:39

Re: Basic Dialog frisst Speicher

Beitrag von CoDude » Sa 3. Dez 2016, 12:22

hallo F3K Total,
tausend Dank erstmal für die schnelle Antwort! hab's gleich eingebaut und getestet und jetzt gibt soffice den Speicher wenigstens frei wenn ich meine Anwendung beende! Am grundsätzlichen Problem des "aufschaukelns" ändert das natürlich leider nichts. Dazu müßte es vielleicht eine Art "Cleanup" oder "Reset" API geben.
Trotzdem wenigstens ein Teilerfolg!
Danke und Gruß,
CoDude

mikele
Beiträge: 431
Registriert: Sa 23. Jul 2011, 22:09

Re: Basic Dialog frisst Speicher

Beitrag von mikele » Sa 3. Dez 2016, 14:03

Hallo,
als ob OO nicht mehr benötigte Objekte nicht aufräumt, bzw. Dialog-Objekte immer wieder neu anlegt
Dazu müsste man mal einen genaueren Blick auf die Arbeitsweise deiner Makros werfen. Wie passiert das "vorwärts-blättern" und was wird dabei alles gemacht (Mitgliedsdaten in Dialogfelder schreiben??? ...)
Werden aus dem Hauptdialog (wie ich mal vermute) weitere Unterdialoge aufgerufen (die dann eventuell in mehreren Instanzen im Speicher herumliegen)?
Gruß,
mikele

karolus
Beiträge: 618
Registriert: Di 23. Feb 2010, 12:07

Re: Basic Dialog frisst Speicher

Beitrag von karolus » Sa 3. Dez 2016, 15:26

Hallo
ich will absichtlich keine Datenbank
Dann musst du auch damit leben das deine "selbstgebastelte" Superlösung bei 500 "Datensätzen" zusammenbricht.

Karolus

balu
Beiträge: 108
Registriert: Di 12. Okt 2010, 11:35

Re: Basic Dialog frisst Speicher

Beitrag von balu » Sa 3. Dez 2016, 23:08

Hallo CoDude,
Läuft auch soweit bestens, nur habe ich jetzt bei einem Intensiv-Test festgestellt, daß schon beim einfachen vorwärts-blättern zum nächsten Mitglied die Speicherbelegung rapide hoch geht. Bei derzeit 500 Test-Mitgliedern kann ich das doc ca. 1,5 mal durchblättern, dann ist mein Speicher bei ca. 2.7 GB belegt und unter Windows 7 verabschiedet sich OO einfach lautlos.
Ich glaube nicht das dies was mit deinem Dialog zu tun hat, sondern ehern viel mehr damit das jedes Tabellenblatt höchstwahrscheinlich mit irgendeinem Datenmüll vollgestopft ist.

Nein nein! Ich unterstelle dir absolut nix, das liegt mir Fern.
Aber da wir nix über deine Datei wissen, da wir sie nicht sehen, will ich dir das mal so rum erklären.

Also falls Du Daten aus irgendeiner Web-Seite in Calc reinkopierst, kann es durchaus passieren das unerwünschter Inhalt mit reinkopiert wird. Dieser Inhalt ist wohl kein Virus oder sonstiges Systemschädliches, aber er kann durchaus das System bremsen.

Der unerwünschte Inhalt kann z.B. irgendein Platzhalter für ein nicht sofort und direkt sichtbares "Bildchen" sein, das durch eine Internetadresse nachgeladen werden will. Dabei spielt die Größe des Bildes absolut keine Rolle, es reicht aus wenn es theoretisch 2 mal 2 Pixel groß ist. Die Hauptrolle in diesem Spektakel spielt nämlich die Internetadresse selbst, da Calc nämlich versucht das "Bildchen" nachzuladen. Auch wenn keine Verbindung zu dieser Adresse besteht, so versucht Calc trotzdem eine Verbindung zu dieser Adresse aufzubauen um das "Bildchen" nachzuladen und das ist eine Aktion wo Calc echte Schwerstarbeit leistet.

Und je mehr solche versteckten Internetadressen pro Blatt existieren, um so länger kann der wechsel von einem Tabellenblat zum anderen dauern. In einem anderen Forum hatten wir mal genau diese Situation. Und da dauerte der Blattwechsel duchaus mehrere Minuten, ich glaube es waren so um die 5 minuten.

Das kannst Du aber schon mal selber gegentesten ob dies bei dir der Fall ist. Ruf einfach den Navigator auf (F5). Und wenn Du dort etwas siehst was da nicht reingehört, a-la

Code: Alles auswählen

http://www......
dann dürfte das höchstwahrscheinlich dein Übeltäter sein.



Gruß
balu

Antworten