| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| SOLIDWORKS PDM Professional im Einsatz bei Wölfle, ein Anwenderbericht |
Autor
|
Thema: Makro: 1,5GB Speicherauslastung!!!!!!! (2247 mal gelesen)
|
Kriechi Mitglied
Beiträge: 147 Registriert: 06.07.2007 Solidworks Office Prof. 2008 SP 4.0 Win XP SP2 Intel Core 2 6600 (2.40 GHz) 2GB RAM nVidia Quadro FX 1500 Monitor HP LP2465
|
erstellt am: 27. Jul. 2007 10:38 <-- editieren / zitieren --> Unities abgeben:
hab gerade ein makro gemacht, welches mir alle referenzierten teile einer BG aufmacht und dann ein bischen code ausfürht, speichert und wieder schließt. Dann macht er weiter mit der nächsten referenz allerdings steigt dabei die Speicherauslastung auf 1.5GB, bis zum absturz!!! kann ich den speicher irgendwie freigeben? anfangs dachte ich es liegt an den dateien, da ich sie anfangs nicht schloß, aber wenn sie zu sind, bleibt der speicher weiterhin registriert... mfg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SLDW-FEM Mitglied Simulations-Ingenieur
Beiträge: 643 Registriert: 21.02.2005 Solidworks 2017+2019+20+22 SpaceClaim Windows 11 64bit HP-ZBook 32gbRAM NVIDIA
|
erstellt am: 27. Jul. 2007 11:14 <-- editieren / zitieren --> Unities abgeben: Nur für Kriechi
Hallo, Passe auf (Quer-) Rekursionen auf ! => Ich habe hier ein assy mit 700 parts bin alle durchgegangen und habe die Filenamen in einen dynamische Liste geschriebe => im Taskman nur 100kB Änderung! PS: Mit Querrekursion meine ich mehrfach vorkommende Sub-assy's Ansonsten schicke mir Deinen Code per PM und ich gucke mal nach dem Fehler :=) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GWS Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2406 Registriert: 23.07.2001 Nach drei Jahren Inventor wieder zurück zu SolidWorks: SWX 23 SP5, PDM Prof
|
erstellt am: 27. Jul. 2007 11:26 <-- editieren / zitieren --> Unities abgeben: Nur für Kriechi
Tip eines nicht-Programmierers: - Scanne die Baugruppe durch und leg die Struktur des Teilebaums in einem extra File auf die Platte (-> Stückliste mit allen Teilen-> Excel?) - mach die BG wieder zu (evtl sogar das CAD neustarten) - ruf jedes Teil einzeln auf, modifiziere es und speichere es wieder ab. Hintergrund ist, dass SWX wohl versucht alle Dateien, die zu einer BG gehören im Speicher zu halten. Wie die Garbage Collection hier funktionieren soll, keine Ahnung, da musst du die Profis fragen... Grüße Günter ------------------ Wie man Fragen richtig stellt Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kriechi Mitglied
Beiträge: 147 Registriert: 06.07.2007 Solidworks Office Prof. 2008 SP 4.0 Win XP SP2 Intel Core 2 6600 (2.40 GHz) 2GB RAM nVidia Quadro FX 1500 Monitor HP LP2465
|
erstellt am: 27. Jul. 2007 11:38 <-- editieren / zitieren --> Unities abgeben:
Code: Sub main() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swAssy As SldWorks.AssemblyDoc Dim swConf As SldWorks.Configuration Dim swRootComp As SldWorks.Component2 Dim bRet As Boolean Dim longstatus As Long Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swConf = swModel.GetActiveConfiguration Set swRootComp = swConf.GetRootComponent typ = swApp.ActiveDoc.GetType() 'Prüfen, ob Baugruppe geöffnet ist If typ <> swDocASSEMBLY Then MsgBox "Aktives Dokument ist keine Baugruppe!" End End If 'Referenzierte Dokumente ermitteln oDummyArray = swApp.GetDocumentDependencies2(swModel.GetPathName, True, False, False) 'Überprüfen ob das Dokument 'überhaupt Referenzen hat! If IsArray(oDummyArray) = False Then 'Wenn keine Referenzen gefunden wurden, 'war das kein Fehler der Funktion! scReferenzen = Nothing End If
For i = 1 To UBound(oDummyArray) Step 2 swApp.ActivateDoc2 oDummyArray(i), True, longstatus Set swModel = swApp.ActiveDoc typ = swApp.ActiveDoc.GetType() 'Prüfen, ob Baugruppe geöffnet ist If typ = swDocPART Then dummy = swModel.AddCustomInfo3("", "MATERIAL", swCustomInfoText, """SW-Material""") swModel.CustomInfo("MATERIAL") = """SW-Material""" swModel.Save2 True End If swApp.CloseDoc swModel.GetTitle ' If i = 15 Then End Next i End Sub
@GWS du schreibts "nicht-programmieres" und weist was der GC ist? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
GWS Ehrenmitglied V.I.P. h.c. Konstrukteur Sondermaschinenbau
Beiträge: 2406 Registriert: 23.07.2001 Nach drei Jahren Inventor wieder zurück zu SolidWorks: SWX 23 SP5, PDM Prof
|
erstellt am: 27. Jul. 2007 11:53 <-- editieren / zitieren --> Unities abgeben: Nur für Kriechi
|
modeng Ehrenmitglied V.I.P. h.c.
Beiträge: 7061 Registriert: 10.12.2003
|
erstellt am: 27. Jul. 2007 12:05 <-- editieren / zitieren --> Unities abgeben: Nur für Kriechi
nach dem Close wuerd' ich das model Objekt freigeben: Set swModel = Nothing damit verschwindet es effektiv, das Neusetzen erzeugt IMHO intern ein neues Object ohne das bisherige freizugeben. Vielleicht hilft's ja schaden tut's auf jeden Fall nicht Klaus ------------------ Unser Unwissen erobert immer weitere Welten. (S.J. Lec) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kriechi Mitglied
Beiträge: 147 Registriert: 06.07.2007 Solidworks Office Prof. 2008 SP 4.0 Win XP SP2 Intel Core 2 6600 (2.40 GHz) 2GB RAM nVidia Quadro FX 1500 Monitor HP LP2465
|
erstellt am: 27. Jul. 2007 13:35 <-- editieren / zitieren --> Unities abgeben:
|
wieching Mitglied Praktikant
Beiträge: 32 Registriert: 09.06.2006
|
erstellt am: 30. Jul. 2007 03:10 <-- editieren / zitieren --> Unities abgeben: Nur für Kriechi
Moinsen! Wir haben auch schon oft an diesem Problem gesessen. Bis jetzt haben wir noch keinen Befehl gefunden, damit SoWo die Parts wieder aus dem Speicher rausloescht. Es reicht nicht mal aus, die Dateien sauber zu schliessen! Wenn wir viele Dateien nacheinander Durcharbeiten muessen, z.b. bei der Mirgration auf eine neue Version, Machen wir das per Programm und schliessen nach 30 Dateien SoWo und oeffnen es erneut. Wenn du so wie jeder die File_oeffnen routine aus der API Hilfe genommen hast, kannste da einfach n zaehler ueber ne globale Variable einbauen und dann mit ner modulo division n Schliess-Takt einbasteln. Dauert 5 Minuten. So kriegen wir es hin, dass es problemlos laeuft. Wenn du n normales SoWo Makro hast, kriegste da natuerlich n Problem. Dein Programm sieht aber aus, als ob es eigenstaendig ist. Im Prinzip machste es genau so, wie Guenter sagt. Asssmblytree auslesen, irgendwo zwischenspeichern und dann abarbeiten. Viel Erfolg. Daniel
[Diese Nachricht wurde von wieching am 30. Jul. 2007 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kriechi Mitglied
Beiträge: 147 Registriert: 06.07.2007 Solidworks Office Prof. 2008 SP 4.0 Win XP SP2 Intel Core 2 6600 (2.40 GHz) 2GB RAM nVidia Quadro FX 1500 Monitor HP LP2465
|
erstellt am: 30. Jul. 2007 07:20 <-- editieren / zitieren --> Unities abgeben:
|
Bernd Knab Mitglied
Beiträge: 373 Registriert: 16.01.2001 SWX 2020 SP5.0
|
erstellt am: 30. Jul. 2007 07:28 <-- editieren / zitieren --> Unities abgeben: Nur für Kriechi
Hallo, du kannst den SWXDocumentManager verwenden. Dort kannst du mit Baugruppen und Dateieigenschaften arbeiten, ohne die Dateien in SWX zu öffnen. Damit solltest du dein Problem in den Griff bekommen. Gruß Bernd Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Kriechi Mitglied
Beiträge: 147 Registriert: 06.07.2007 Solidworks Office Prof. 2008 SP 4.0 Win XP SP2 Intel Core 2 6600 (2.40 GHz) 2GB RAM nVidia Quadro FX 1500 Monitor HP LP2465
|
erstellt am: 30. Jul. 2007 07:29 <-- editieren / zitieren --> Unities abgeben:
|
Ralf Tide Moderator -
Beiträge: 4988 Registriert: 06.08.2001 Sehr seltsame Dinge passiern <Klaus Lage - Toy Story> .-)
|
erstellt am: 30. Jul. 2007 09:47 <-- editieren / zitieren --> Unities abgeben: Nur für Kriechi
Zitat: Original erstellt von Kriechi: ...kann man eine dateieigenschaft erstellen, ohne die datei mit SWX zu öffnen?...
Hallo Thomas, ja, das geht auch. Z.B. mit einem Programm (Change Custom Properties) von Trimech Solutions: http://www.trimechsolutions.com/tech_resources.html Verwendet die dsofile.dll (müsste aber beschrieben sein). Darüber (dsofile.dll) kannst Du auch mit anderen Anwendungen ein VBA-Makro schreiben und benutzerdefinierte Eigenschaften verändern. Alternativen:
- verwende PAC4SWX. Damit kannst Du die (ET-)Dateien im Browser auswählen und Dein Makro auf die Dateien loslassen.
- wenn Du die Eigenschaften eines Einzelteils in einer geöffneten Baugruppe verändern willst, geht das auch mit dem Excel-Makro (Nr. 05 in der Makro Tasuchbörse von Stefan Berlitz) von Andreas Müller. Kann auch konfigurationsspezifische Dateieigenschaften verändern!
HTH & bis demnäx, Ralf ------------------ Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Bernd Knab Mitglied
Beiträge: 373 Registriert: 16.01.2001 SWX 2020 SP5.0
|
erstellt am: 30. Jul. 2007 09:48 <-- editieren / zitieren --> Unities abgeben: Nur für Kriechi
|
Kriechi Mitglied
Beiträge: 147 Registriert: 06.07.2007 Solidworks Office Prof. 2008 SP 4.0 Win XP SP2 Intel Core 2 6600 (2.40 GHz) 2GB RAM nVidia Quadro FX 1500 Monitor HP LP2465
|
erstellt am: 30. Jul. 2007 10:10 <-- editieren / zitieren --> Unities abgeben:
die Bsp's werd ich gleich suchen und anschauen! Das Makro von Andreas Müller habe ich schon angeschaut, allerdings is da ein Kennwort vergeben, somit weiß ich nicht wie er das gemacht hat, ich könnt ihn auch fragen mfg Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |