Forum:Lisp
Thema:Speicher wird voll und Programm wird langsamer bis zum Stillstand
Möchten Sie sich registrieren?
Wer darf antworten? Registrierte Benutzer können Beiträge verfassen.
Hinweise zur Registrierung Sie müssen registriert sein, um Beiträge oder Antworten auf Beiträge schreiben zu können.
Ihr Benutzername:
Ihr Kennwort:   Kennwort vergessen?
Anhang:    Datei(en) anhängen  <?>   Anhänge verwalten  <?>
Grafik für den Beitrag:                                                
                                                       
Ihre Antwort:

Fachbegriff
URL
Email
Fett
Kursiv
Durchgestr.
Liste
*
Bild
Zitat
Code

*HTML ist AUS
*UBB-Code ist AN
Smilies Legende
Netiquette

10 20 40

Optionen Smilies in diesem Beitrag deaktivieren.
Signatur anfügen: die Sie bei den Voreinstellungen angegeben haben.

Wenn Sie bereits registriert sind, aber Ihr Kennwort vergessen haben, klicken Sie bitte hier.

Bitte drücken Sie nicht mehrfach auf "Antwort speichern".

*Ist HTML- und/oder UBB-Code aktiviert, dann können Sie HTML und/oder UBB Code in Ihrem Beitrag verwenden.

T H E M A     A N S E H E N
Andreas Kraus

Beiträge: 1193 / 1

WIN 10
ACAD 2017

Hallo zusammen,
ich habe folgende LISP-Konstuktion:
Code:
(foreach dwgname files_list
    (vla-open (setq dbx (k_get_interface_object))
      dwgname
    )
;;; mach was in der Datei
    (k_erfassung_work dbx)
    (k_rp004_work dbx)
    (k_elt_002 "Erfassen" dbx)
    (vla-saveas dbx dwgname)
    (not (vl-catch-all-error-p
  (vl-catch-all-apply
    'vlax-release-object
    (list DBX) ;_DBX-Verknüfung wieder freigeben
  )
)
    )
    (gc)
    (princ)
  )

Das Problem dabei ist dass bei jeder Datei die Speicherauslastung (im Task Manager) hochläuft und das LISP etwas langsamer wird bis es einfach stehenbleibt und ich ACAD per Taskmanager killen muss. Mehr als 4-5 Dateien nacheinander gehen nicht. Dann muss ich ACAD schließen, neu starten und mit den Dateien weitermachen. Die aktuelle Datei schließen bringt auch nichts, ACAD muss komplett zu. Nervt ganz schön.

Ich hab mich noch nicht mit Speicherbedarf usw. beschäftigt weil ich bisher kein Problem damit hatte.
Hab mal zum Ausprobieren (gc) ins Programm geschrieben ... hat nix gebracht.
Kann mir mal jemand einen kräftigen Tritt in die richtige Richtung geben ?

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

joern bosse

Beiträge: 1679 / 6

Window 8.1
ACAD 2012-2020
CIVIL 2012 - 2020
BricsCAD V14-V20
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050

Hallo Andreas,
ich würde zumindestens die Rückgabe der Funktion VL-CATCH-ALL-ERROR-P auswerten:
Code:

(if (vl-catch-all-error-p
        (vl-catch-all-apply
          'vlax-release-object
          (list DBX) ;_DBX-Verknüfung wieder freigeben
        )
      )
    (alert "Fehler bei Release")
  )

Desweiteren würde ich alle Funktionen auskommentieren und dann immer nur eine testen, um zu prüfen, ob diese Deinen Speicher zumüllen.

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Multifilter Youtube

Andreas Kraus

Beiträge: 1193 / 1

WIN 10
ACAD 2017

Danke Jörn,
hab gestern noch dran rumprobiert.
Die Funktion (k_rp004_work dbx) ermittelt für alle Blockeinfügungen Raumpolygone und schreibt Daten in die Objekte.
Wird dann für Massenermittlung, Raumbuch, Schemapläne, usw. verwendet.

Folgende Erkenntnisse:
- Es liegt NICHT an ODBX
- es liegt ziemlich eindeutig daran dass die Daten in die Objekte geschrieben werden.
- ich verwende dafür erweiterte Elementdaten, muss noch testen ob das mit Attributen auch passieren würde.
- das reine Ermitteln der Daten macht nichts, erst das Schreiben der Daten erhöht der Speicherbedarf.
- Wenn (k_rp004_work dbx) nicht ausgeführt wird oder dort das Schreiben in die Objekte auskommentiert ist, läuft alles super.

Meine Funktion um Daten in Objekte zu schreiben ist ziemlich komplex weil hier beliebige Daten in beliebige Objekte geschrieben werden können. Ich reduziere das mal auf EEDs und schau mal was passiert.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Andreas Kraus

Beiträge: 1193 / 1

WIN 10
ACAD 2017

Hab auch noch z.B. das hier gefunden:
https://ww3.cad.de/foren/ubb/Forum54/HTML/003875.shtml#000004

Ist zwar von 2003 aber kann ja sein dass sich da nix getan hat 

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

joern bosse

Beiträge: 1679 / 6

Window 8.1
ACAD 2012-2020
CIVIL 2012 - 2020
BricsCAD V14-V20
Intel(R) Core(TM)i5-8250U CPU @ 1.60GHz 1.80 GHz
16.0GB RAM
NVIDIA GeForce GTX 1050

Hallo Andreas,
wie speicherst Du die erweiterten Elementdaten an die Objekte, mit ENTMOD und Gruppencode -3 oder über vla-SetXData?

Ich hatte vor ein paar Jahren auch schon mal ein Problem mit Xdaten innerhalb eines DBX-Objektes gehabt, dann habe ich anstelle ENTMOD vla-SetXdata verwendet und der Spuk war vorbei. Leider weiß ich nicht mehr, wodrin in meinem Fall das Problem lag, aber für Dich wäre es vielleicht ein Versuch wert, es mit einer anderen Variante zu probieren.
Viel Glück.

------------------
viele Grüße

Jörn
http://www.bosse-engineering.com

Multifilter Youtube

Andreas Kraus

Beiträge: 1193 / 1

WIN 10
ACAD 2017

Hm ... also ich verwende grade vla-SetXData und wollte jetzt mal die ENTMOD-Methode versuchen.
Is ja lustig 
Hatte aber heute noch keine Zeit. Die Arbeit, die Arbeit.

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Andreas Kraus

Beiträge: 1193 / 1

WIN 10
ACAD 2017

Ich glaube es ist _UNDO.
Habs grade ausprobiert, teste es aber nochmal morgen in der Firma auf der Maschine wo es die Probleme gab.

Wenn ich _UNDO ausschalte bleibt hier der Speicherbedarf wo er ist. Schwankt wärend der Ausführung etwas aber so im Großen Ganzen tut sich nix.
Wär ja fast zu einfach um gleich drauf zu kommen 

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Andreas Kraus

Beiträge: 1193 / 1

WIN 10
ACAD 2017

Hatte endlich wieder Zeit zum Suchen 
Habs gefunden 
Oh ... wie blöd war das denn   

Hab eigene INI-Dateien die ich so aufgebaut habe dass ich die mit LOAD laden kann.
Dabei wird auch gecheckt ob sich was aktualisiert hat.
Das ist mir in eine Schleife geraten und ich hatte bei jedem Zugriff auf die INI-Daten auch einen LOAD-Befehl um die Datei zu checken.
Bei JEDER Änderung von Attributen, Parameter, EEDs.
Hunderte von LOADs

Das macht den Speicher voll und den Rechner langsam.

Jetz hab ich ein LOAD am Anfang und dann ist Ruhe.

Ich frage mich aber ob man irgendwie verhindern kann dass, wenn mit LOAD immer wieder dasselbe geladen wird, der Speicher immer weiter vollläuft und ACAD ausgebremst wird.
Wenn da jemand was weiß ... ich lerne gerne dazu 

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de

Andreas Kraus

Beiträge: 1193 / 1

WIN 10
ACAD 2017

Update zu meiner Antwort 

Es ist nicht LOAD ... es ist vlax-ldata-put 

Jetzt weiß ich was ich umbauen muss

------------------
Geht nicht, gibts nicht

Gruß
Andreas

http://kraus-cad.de