| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: COM-Kontext? (2401 mal gelesen)
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 17. Dez. 2014 15:19 <-- editieren / zitieren --> Unities abgeben:
Hallo, ich habe das Problem, dass mein Programm immer nach einiger Durchlaufzeit mit folgender Fehlermeldung abbricht: DisconnectedContext wurde erkannt. Message: Folgender Fehler beim Übergang in den COM-Kontext 0x2004d80 für diesen RuntimeCallableWrapper: Systemaufruf ist fehlgeschlagen. (Ausnahme von HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED)). Dieser tritt in der Regel auf, da der COM-Kontext 0x2004d80, in dem dieser RuntimeCallableWrapper erstellt wurde, getrennt wurde oder aufgrund eines anderen Vorgangs ausgelastet ist. Die Schnittstellen werden aus dem aktuellen COM-Kontext (COM-Kontext 0x2004b30) freigegeben. Dies kann Datenbeschädigung oder -verlust zur Folge haben. Um dieses Problem zu vermeiden, müssen Sie sicherstellen, dass alle COM-Kontexte/Apartments/Threads so lange beibehalten werden und für den Kontextübergang verfügbar sind, bis die Anwendung alle RuntimeCallableWrappers, die in ihnen enthaltene COM-Komponenten darstellen, vollständig verarbeitet hat.
Das Programm kopiert Baugruppen inklusive zugehörige Komponenten in einen Ordner und öffnet dann die Baugruppe. Dann werden die Komponenten ersetzt und, nach einer Excelliste, in der Größe angepasst. Dann wird die Baugruppe aktualisiert und gespeichert. Dann geht es an die nächste Baugruppe. Funktioniert auch ganz gut und lief bis jetzt eigentlich immer reibungslos. Nur seit heute, nachdem ich das Programm erweitert habe um höhere Baugruppennummern zu erfassen, kommt ständig diese Meldung.
Die Suche im Netz hat mich leider nicht wirklich weiter gebracht. Vielleicht kann mir ja hier jemand helfen und mir sagen, wie ich das umgehen kann. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 19. Dez. 2014 13:39 <-- editieren / zitieren --> Unities abgeben: Nur für Chris 31
Hallo Meist tritt das Problem auf, wenn zu viele Inventorinstanzen parallel aufgerufen werden (mal im Taskmanager zur Laufzeit prüfen) oder wenn Instanzen nicht sauber freigegeben werden. Nach jedem Durchlauf sollte die Baugruppe nicht nur geschlossen, sondern auch alle erzeugten COM-Objekte freigegeben werden. Schau dir mal
Code: System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj)
an. Damit solltest du möglichst alle Objekte die nicht mehr im nächsten Durchlauf benötigt werden, freigegeben. Hoffe es hilft. EDIT: Kontrollier auch mal deinen RAM-Verbrauch zur Laufzeit. Eventuell schmiert dir die aktuelle Inventorinstanz wegen Speichermangel ab. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 19. Dez. 2014 14:56 <-- editieren / zitieren --> Unities abgeben:
Das Problem ist, dass ich die COM-Objekte noch weiter benötige. Hatte schon geschaut, ob vielleicht mehrere Instanzen laufen. Ist aber nicht der Fall. Hab auch den RAM in Verdacht, aber daran kann ich ja leider nicht viel ändern. Hab es mittlerweile auch in den Griff bekommen. Danke dir trotzdem erstmal ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
rkauskh Moderator Dipl.-Ing. (FH) Versorgungstechnik
Beiträge: 2166 Registriert: 15.11.2006 Windows 10 x64, AIP 2022
|
erstellt am: 31. Dez. 2014 09:42 <-- editieren / zitieren --> Unities abgeben: Nur für Chris 31
Hallo Von welchen Größenordnungen reden wir eigentlich? Wie viele Baugruppen stehen in der Excelliste die noch funktioniert und ungefähr ab welcher Anzahl geht's schief? Der Aufgabenplaner von Inventor startet den von ihm benutzten Apprenticeserver vermutlich auch nicht ohne Grund nach z.B. ca. 50 migrierten Dateien neu. ------------------ MfG Ralf Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 07. Jan. 2015 07:20 <-- editieren / zitieren --> Unities abgeben:
Guten Morgen Ralf, ein frohes Neues erstmal. Die Fehlermeldung kommt leider immer nach unterschiedlich vielen Dateien. Mal läuft das Programm bis über 45 Dateien durch, mal geht es schon bei 21 in die Knie. In der Excelliste stehen über Hundert Baugruppen, wobei nach ca. 60 ein Wechsel zu einer anderen Baugruppe stattfindet.
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 07. Jan. 2015 08:49 <-- editieren / zitieren --> Unities abgeben: Nur für Chris 31
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 07. Jan. 2015 08:56 <-- editieren / zitieren --> Unities abgeben:
Hi Igor, ja das mit dem Speicher konnte ich mittlerweile komplett ausschließen. Von den 16 GB die insgesamt da sind, sind bei Fehlermeldung noch gute 12,5 GB verfügbar. Prozessorauslastung ist während des gesamten Programmlaufs zwischen 6 und 10 %. ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 09. Jan. 2015 08:28 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal, gibt es denn eine Möglichkeit, diesen Fehler abzufangen? Ich hab es jetzt mit try...catch probiert um Inventor wieder zu instanzieren, aber das funktioniert leider nicht. Gibt es da vielleicht eine andere Möglichkeit?
------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 09. Jan. 2015 09:28 <-- editieren / zitieren --> Unities abgeben: Nur für Chris 31
Ohne zu sehen wie du das versuchst ist es schwer zu sagen. Ich würde es so versuchen (Biespiel mit Inventor Objekt - mit Apprentice sollte es das Gleiche sein). Ein neue Klasse in dein Projekt hinzufügen und diesen Code Einfügen: Code:
using System; using System.Windows.Forms;namespace CAD // namespace an dein namespace anpassen { public static class CAD { private static Inventor.Application invApp = null; public static Inventor.Application InvApp { get { try { if (invApp == null) // Hier sollte die Ausnahme passieren wenn der Server unerwartet getrennt wurde invApp = System.Runtime.InteropServices.Marshal.GetActiveObject("Inventor.Application") as Inventor.Application; } catch (Exception ex) { MessageBox.Show("Problem mit Inventor Application" + System.Environment.NewLine + ex.InnerException.ToString (), "Inventor läuft nicht", MessageBoxButtons.OK, MessageBoxIcon.Warning); // Hier kannst du auf die Ausnahme reagieren, invApp neu zuweisen... // return null; // ... oder auch nicht... } return invApp; } } } }
Anschließend sollen alle Zugriffe auf das Inventor / Apprentice Objekt über diese Klasse stattfinden. Vielleicht läuft er dann so rein in die Try/Catch. ------------------ Grüße Igor FX64 Software Solutions - Inventor Tools FX64 LambdaSpect - Lichtsimulation mit Autodesk Inventor Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 09. Jan. 2015 11:25 <-- editieren / zitieren --> Unities abgeben:
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 14. Jan. 2015 11:58 <-- editieren / zitieren --> Unities abgeben:
Hallo nochmal, gibt es eine Möglichkeit, den Speicher während der Laufzeit des Programms wieder zu entleeren, ohne Inventor zu schließen und neu zu starten? Das was Igor vorgeschlagen hat, funktioniert so bei mir leider nicht ------------------ MFG Chris Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
daywa1k3r Moderator Softwareentwickler
Beiträge: 3497 Registriert: 01.08.2002 Desktop: 3.3GHz;8GB;SSD OCZ Vertex 3;Gainward Phantom GTX570 Laptop: Alienware m17x Win7, Inventor2012
|
erstellt am: 14. Jan. 2015 12:36 <-- editieren / zitieren --> Unities abgeben: Nur für Chris 31
|
Chris 31 Mitglied Konstrukteur und Mädchen für alles
Beiträge: 575 Registriert: 23.04.2013 Inventor 2015 Professional Windows 7 64 bit 16GB RAM nVidia Quadro 600
|
erstellt am: 14. Jan. 2015 12:39 <-- editieren / zitieren --> Unities abgeben:
|