ich einen Verweis in einem Visual Studio-Projekt zu einem gewissen COM-Bibliothek hinzugefügt. Wenn ich jetzt in einer Methode ein Objekt anlege, wird dieses COM-Objekt automatisch freigegeben, wenn das Programm diese Methode verlässt? Oder sollte ich diese Objekte immer manuell freigeben? (ReleaseComObject oder FinalReleaseComObject?).Releasing COM-Objekte
Antwort
Es ist sicherlich nicht automatisch erfolgt, und in einigen Fällen kann es gefährlich sein, dies zu tun (durch den Aufruf Marshal.ReleaseComObject
) as described in this blog post.
Für In-Proc COM-Objekte, gibt es oft keine Notwendigkeit an allen COM-Objekte freizugeben.
Für Out-Proc COM-Objekte kann es wichtig sein, um sich zu lösen, was zu Problemen wie Office apps failing to shut down after automation from a .NET client zu verhindern.
Wenn Sie ein COM-Objekt in einem scoped, Single-Threaded-Art und Weise verwenden, dann können Sie sicher ReleaseComObject auf das nennen:
In diesem Fall würde ich den Rat in der oben verlinkten Blog-Post folgen Objekt, wenn Sie damit fertig sind.
Aber wenn Sie ein COM-Objekt von mehreren Stellen oder mehreren Threads in Ihrer Anwendung (oder aus anderen Anwendungen im gleichen Prozess) verwenden, sollten Sie nicht rufen ReleaseComObject
Sie können Marshal.ReleaseComObject verwenden: http://msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal.releasecomobject.aspx
- 1. Releasing Core Objektreferenzen
- 2. Schloss Windsor Releasing Komponenten
- 3. Releasing eine Eigenschaft (Objective-C)
- 4. Releasing LINQ to SQL-Ressourcen OutOfMemoryException
- 5. Castle Windsor - Releasing Interceptor mit transientem Lebensstil
- 6. App Absturz zufällig auf einigen iOS9-Geräten nach dem Schließen der Kamera-Controller
- 7. Spring Hibernate, zu vermeiden, dass Anweisungen registrieren und schließen wiederholt
- 8. zeigt " in td anstelle von <
- 9. "Freigabe" zu oft aufrufen?
- 10. Thread-sicher erhalten (Accessor-Methode)
- 11. Verlassene Mutex Ausnahme
- 12. Double gcm Benachrichtigungen
- 13. bearbeiten bestehende Excel-Arbeitsmappen und Blätter mit xlrd und xlwt
- 14. Berechnung der akkumulierten Fläche eines Arrays von Formen
- 15. Es kann keine CGContextRef (im Kontext von einem CGLayer ist) freizugeben
- 16. Wie zu vermeiden, Hibernate und JDBC logging log4j Logger
- 17. Wie kann ich Wert von HTML-Tag in IOS erhalten?
- 18. Sollen wir BSTR-Typ in COM als Wert oder Referenz behandeln?
- 19. So ändern Sie "remote Prozessarten" für Heroku Bereitstellung mit Docker
- 20. SQL Abfrage von vielen Tabellen in PHP
- 21. Aufruf von Release auf COM-Objekt scheint nie zurückzukehren
- 22. über Freigabe eine NSDecimalNumber
- 23. NSArray Release Absturz
- 24. `libusb_attach_kernel_driver` nicht
- 25. Readonly Felder werden null, wenn vom Finalizer
- 26. Zookeeper zum Sperren von mehreren Ressourcen
- 27. Mysql Master/Slave-Replikation .Connect, um auch für Leseanfragen zu meistern? (Tut Driver "ping" Master-Slave vor zu gehen?)
- 28. "Zwischengespeicherter Artikel wurde gesperrt" verursacht Select-Anweisung in Hibernate
- 29. Den Titel einer Navigationsleiste in einem Tab-Bar-Controller setzen
- 30. Android-Kamera kann kein Foto vom Hintergrunddienst aufnehmen
Es gibt noch mehr zu diesem Thema ist [hier] (http://stackoverflow.com/questions/1827059/why-use-finalreleasecomobject-instead-of-releasecomobject) – StuartLC
einige Zeit Ersatz zu untersuchen und Patienten sein, da die Artikel alle sind hart und langweilig, wie http: // blogs.msdn.com/b/visualstudio/archive/2010/03/01/marshal-releasecomobject-considered-dangerous.aspx –