2012-09-26 4 views
5

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

+1

Es gibt noch mehr zu diesem Thema ist [hier] (http://stackoverflow.com/questions/1827059/why-use-finalreleasecomobject-instead-of-releasecomobject) – StuartLC

+1

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 –

Antwort

3

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

Verwandte Themen