| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS |
| |
| SPS |
Autor
|
Thema: API Performance erhöhen (2363 mal gelesen)
|
stevieda Mitglied Dipl.-Ing.
Beiträge: 138 Registriert: 21.11.2003 Pro/E Wildfire 3.0 M080 SolidWorks Premium 2007 SP 5.0 CATIA V5 R17 Inventor Pro 12 NX 4.0.0.25 WinXP SP2
|
erstellt am: 25. Jul. 2008 09:31 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, hat jemand eine Idee, wie man die Performance einer API-Routine erhöhen kann? In meinem konkreten Beispiel wird eine Ebene in kleinen Schritten bewegt, d.h. es wird in einer Schleife immer wieder der Offset-Wert verändert. Des Weiteren wird für jeden Schritt eine Schnittkurve (Ebene <-> Bauteil) erstellt. Dieses ständige Selektieren und immer wieder neu Anzeigen der Feature lässt die Performance ganz schön sinken. Ich habe schon die Skizze (Schnittkurve) und die Ebene ausgeblendet, damit die nicht immer wieder dargestellt werden müssen. Aber wenn ich z.B. die Definition der Ebene (Änderung des Offset-Werts) ändere, wird die Ebene ja wieder selektiert. Also gibt es irgendeine Möglichkeit den Bildschirm einzufrieren oder erst alle Operationen durchzuführen und erst am Ende einen Modellneuaufbau anzustoßen? Mir geht es wirklich nur um die Geschwindigkeit. Ich muss keinen einzigen Schritt dargestellt bekommen. Nur das Endergebnis ist wichtig. Bin wie immer für jede Form der Anregung dankbar! ------------------ Gruß, Stevie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian Kolnhofer Mitglied Maschinenbautechniker, CSWP 11/07
Beiträge: 335 Registriert: 06.06.2005 HP Z400, 6GB, Quadro 2000, XP Prof X64 SWX 2011x64 SP5 ProfiDB V12.1 Space Explorer
|
erstellt am: 25. Jul. 2008 09:37 <-- editieren / zitieren --> Unities abgeben: Nur für stevieda
Hallo, versuche mal während dein Makro läuft ein beliebiges SWX-Pull-Down Menü geöffnet zu haben. Stichwort "Solid Works Turbo". Vielleicht bringt das was. Gruß Christian [Diese Nachricht wurde von Christian Kolnhofer am 25. Jul. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stevieda Mitglied Dipl.-Ing.
Beiträge: 138 Registriert: 21.11.2003 Pro/E Wildfire 3.0 M080 SolidWorks Premium 2007 SP 5.0 CATIA V5 R17 Inventor Pro 12 NX 4.0.0.25 WinXP SP2
|
erstellt am: 25. Jul. 2008 09:48 <-- editieren / zitieren --> Unities abgeben:
Hallo Christian, hmmm, tut mir leid aber ich kann gerade nicht ganz folgen. "Solid Works Turbo" ist mir völlig unbekannt. Habe hier im Forum sowie im Netz geschaut aber nichts zu gefunden. Kannst Du mir das bitte ein klein wenig erläutern? Wie könnte ich ein Pulldown-Menü per API aufmachen? ------------------ Gruß, Stevie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 25. Jul. 2008 10:06 <-- editieren / zitieren --> Unities abgeben: Nur für stevieda
Hi, ein einfacher Trick um das Painting zu verhindern ist diese Funktion: Private Declare Function LockWindowUpdate Lib "user32.dll" (ByVal hwndLock As Long) As Long Call LockWindowUpdate(swApp.Frame.hwnd) ' 'mach was ... ' Call LockWindowUpdate(0) -- das könnte Funktionieren muss aber nicht da manche Programme den Update beim Refresh immer aktivieren Gruß Micha
------------------ Stell dir vor, es geht, und keiner kriegts hin. Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Christian Kolnhofer Mitglied Maschinenbautechniker, CSWP 11/07
Beiträge: 335 Registriert: 06.06.2005 HP Z400, 6GB, Quadro 2000, XP Prof X64 SWX 2011x64 SP5 ProfiDB V12.1 Space Explorer
|
erstellt am: 25. Jul. 2008 10:38 <-- editieren / zitieren --> Unities abgeben: Nur für stevieda
Hallo Stevie, SWX hat die Eigenheit das manche Makros schneller ausgeführt werden wenn zeitgleich in SWX ein beliebiges Pull Down Menü geöffnet ist. Klingt komisch, ist aber so. Das Verhalten wird als SWX Turbo bezeichnet. Gruß Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stevieda Mitglied Dipl.-Ing.
Beiträge: 138 Registriert: 21.11.2003 Pro/E Wildfire 3.0 M080 SolidWorks Premium 2007 SP 5.0 CATIA V5 R17 Inventor Pro 12 NX 4.0.0.25 WinXP SP2
|
erstellt am: 25. Jul. 2008 11:14 <-- editieren / zitieren --> Unities abgeben:
Hallo Micha, das hört sich doch schon mal vielversprechend an. Jetzt bin ich aber noch recht neu in der API-Programmierung und kein Profi. Habe versucht den Code-Auszug nachzuvollziehen, hab da aber noch meine Schwierigkeiten. Hättest Du da evtl. ein kleines Beispiel? Konnte noch nicht ganz nachvollziehen wie ich das in ein Makro einbauen muss. Vielen Dank! Nachtrag: Die Deklaration hab ich verstanden. Aber was steht in der Funktion? Danach kommt doch nur 2x der Aufruf der Funktion. ------------------ Gruß, Stevie [Diese Nachricht wurde von stevieda am 25. Jul. 2008 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stevieda Mitglied Dipl.-Ing.
Beiträge: 138 Registriert: 21.11.2003 Pro/E Wildfire 3.0 M080 SolidWorks Premium 2007 SP 5.0 CATIA V5 R17 Inventor Pro 12 NX 4.0.0.25 WinXP SP2
|
erstellt am: 25. Jul. 2008 11:18 <-- editieren / zitieren --> Unities abgeben:
|
stevieda Mitglied Dipl.-Ing.
Beiträge: 138 Registriert: 21.11.2003 Pro/E Wildfire 3.0 M080 SolidWorks Premium 2007 SP 5.0 CATIA V5 R17 Inventor Pro 12 NX 4.0.0.25 WinXP SP2
|
erstellt am: 25. Jul. 2008 11:21 <-- editieren / zitieren --> Unities abgeben:
|
stevieda Mitglied Dipl.-Ing.
Beiträge: 138 Registriert: 21.11.2003 Pro/E Wildfire 3.0 M080 SolidWorks Premium 2007 SP 5.0 CATIA V5 R17 Inventor Pro 12 NX 4.0.0.25 WinXP SP2
|
erstellt am: 25. Jul. 2008 11:34 <-- editieren / zitieren --> Unities abgeben:
|
Christian Kolnhofer Mitglied Maschinenbautechniker, CSWP 11/07
Beiträge: 335 Registriert: 06.06.2005 HP Z400, 6GB, Quadro 2000, XP Prof X64 SWX 2011x64 SP5 ProfiDB V12.1 Space Explorer
|
erstellt am: 25. Jul. 2008 11:40 <-- editieren / zitieren --> Unities abgeben: Nur für stevieda
|
VBSpawn Mitglied Programmierer
Beiträge: 514 Registriert: 23.08.2005 Sorgfältige Planung ersetzt niemals pures Glück.
|
erstellt am: 25. Jul. 2008 12:21 <-- editieren / zitieren --> Unities abgeben: Nur für stevieda
Zitat: Original erstellt von stevieda: [i] Super! Hat hervorragend geklappt. Vielen Dank dafür (10 U's!).
fast Nachbarn hilft man doch gerne .... ) nur noch nen kleinen Nachtrag: denk immer daran den Lock Aufruf mit dem Parameter 0 (gerade im Fehlerfall !) aufzurufen .... sonst scheint es immer als ob der PC hängt.. Gruß Micha ------------------ Stell dir vor, es geht, und keiner kriegts hin. Zitat: Interpunktion und Orthographie des Postings sind frei erfunden. Eine Übereinstimmung mit aktuellen oder ehemaligen Regeln wäre rein zufällig und ist nicht beabsichtigt.
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stevieda Mitglied Dipl.-Ing.
Beiträge: 138 Registriert: 21.11.2003 Pro/E Wildfire 3.0 M080 SolidWorks Premium 2007 SP 5.0 CATIA V5 R17 Inventor Pro 12 NX 4.0.0.25 WinXP SP2
|
erstellt am: 25. Jul. 2008 12:52 <-- editieren / zitieren --> Unities abgeben:
@ Christian: Leider nicht. SWX ackert sofort los, so dass ich gar keine Chance habe da irgendwie manuell einzugreifen. Ich könnte höchstens einen Haltepunkt in mein Makro mit einbauen. Das erscheint mir aber nicht sehr praktikabel. Aber der Vorschlag von Micha hat sehr gut funktioniert. Damit ist die Geschwindigkeit des Abarbeitens schon deutlich vergrößert worden. Aber trotzdem vielen Dank für den Hinweis mit dem SWX Turbo. Das werde ich mir merken für zukünftige Anwendungsfälle, wenn ich die durchzuführenden Schritte während der Laufzeit auch sehen muss. ------------------ Gruß, Stevie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
ChrisB Mitglied
Beiträge: 61 Registriert: 14.03.2005 SolidWorks 2006/2008 WinXP Pro MS VS 2005
|
erstellt am: 28. Jul. 2008 11:35 <-- editieren / zitieren --> Unities abgeben: Nur für stevieda
Hi! Wenn viele Befehle an SWX gesendet werden müssen (viele kleine Operationen) ist es auf jeden Fall ratsam auf seperate .exe Dateien zu verzichten und das Programm als VBA-Makro oder .dll laufen zu lassen. Aber ich geh mal davon aus, dass du das ohnehin machst. Wenn es nur darum geht quasi "read-only" irgendwelche Daten wie Schnittpunkte, Schnittkurven, Koordinaten, etc auszulesen, ist es meist praktisch die speziellen API-Befehle wie "IntersectCurve2" oder ähnliches zu verwenden. Ist zwar aufwändig, aber höllisch schnell. Meiner Erfahrung nach gibt is bei der ganzen API Programmierung viel Optimierungspotential, aber was genau man in den einzelnen Fällen verbessern kann ist sehr speziell. Ob ich dir mit diesem Posting jetzt allerdings geholfen hab weis ich auch nicht... Grüße Christian Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stevieda Mitglied Dipl.-Ing.
Beiträge: 138 Registriert: 21.11.2003 Pro/E Wildfire 3.0 M080 SolidWorks Premium 2007 SP 5.0 CATIA V5 R17 Inventor Pro 12 NX 4.0.0.25 WinXP SP2
|
erstellt am: 28. Jul. 2008 12:33 <-- editieren / zitieren --> Unities abgeben:
Hallo Christian, danke schon mal für Dein Statement. Ich glaube auch, dass es sehr viel Optimierungspotenzial in SWX gibt. Das mit Call LockWindowUpdate hat auf jeden Fall schon mal geholfen. Ich glaube alles weitere ist wirklich davon abhängig was man machen möchte und inwiefern man auf Geometrie oder Topologie zugreifen muss. Ich glaube in meinem Fall muss ich einfacher ein bisschen mehr mathematisch an die Sache herangehen. Somit greife ich weniger auf SWX-Objekte zu und verwende statt dessen wesentlich mehr Datentypen wie Double, Long, etc. und hantiere mehr mit Zahlen als mit Objekten. Aber auch das ist nicht immer möglich. Zum Beispiel muss ich Koordinaten von Flächeneckpunkten auslesen, wobei sich die Orientierung des Körpers sukzessive ändert. Dadurch, dass ich immer die Flächen des Körpers durchwandern muss, geht durch diese permanenten Zugriffe die Performance in den Keller. ------------------ Gruß, Stevie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
StefanBerlitz Guter-Geist-Moderator IT Admin (CAx)
Beiträge: 8756 Registriert: 02.03.2000 SunZu sagt: Analysiere die Vorteile, die du aus meinem Ratschlag ziehst. Dann gliedere deine Kräfte entsprechend und mache dir außergewöhnliche Taktiken zunutze.
|
erstellt am: 28. Jul. 2008 12:47 <-- editieren / zitieren --> Unities abgeben: Nur für stevieda
Hallo zusammen, eine kleine Ergänzung noch zum Thema "SolidWorks API Turbo durch Menu aufklappen": das funktioniert sehr gut bei "Out of process" Anwendungen, also externen Programmen in Form von EXE oder Excelmakros etc. Der Hintergrund: wenn SolidWorks glaubt nichts mehr zu tun zu haben geht es in einen IDLE process mode und fragt so Sachen wie gedrückte Tasten, neu zu zeichnende Icons usw. ab. Durch Aufklappen eines Menus geht SolidWorks in einen anderen Loop der diese IDLE processes gar nicht mehr anschaut. Dieses Verhlaten kann man aber auch per API call selbst forcieren, wenn man einen solchen externen Prozess hat: mit SldWorks::CommandInProgress kann man SolidWorks mitteilen, dass gleich eine ganze Sequenz an API calls kommt und dass es bitte mit der IDLE processing so lange warten soll, bis die durch sind (also wieder den CommandInProcess auf false setzen). Ich glaube allerdings nicht, dass es in diesem Fall etwas bringen kann, da wohl eher das Neuzeichnen des ModelViews den Zeitverlust bedeutet. Ciao, Stefan ------------------ Inoffizielle deutsche SolidWorks Hilfeseite http://solidworks.cad.de Stefans SolidWorks Blog Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
stevieda Mitglied Dipl.-Ing.
Beiträge: 138 Registriert: 21.11.2003 Pro/E Wildfire 3.0 M080 SolidWorks Premium 2007 SP 5.0 CATIA V5 R17 Inventor Pro 12 NX 4.0.0.25 WinXP SP2
|
erstellt am: 28. Jul. 2008 13:32 <-- editieren / zitieren --> Unities abgeben:
Hallo Stefan, aha, das ist schon mal eine sehr hilfreiche Aussage. In diesem speziellen Fall wird es bei mir nicht so viel bringen, aber vielen Dank für die Info. Werde sehen ob ich das zukünftig bei mir einbauen kann. ------------------ Gruß, Stevie Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |