Ho aggiunto un riferimento in un progetto di Visual Studio a qualche libreria COM. Ora quando creo e oggetto in un metodo, questo oggetto COM verrà rilasciato automaticamente quando il programma lascia quel metodo? O dovrei sempre rilasciare questi oggetti manualmente? (ReleaseComObject o FinalReleaseComObject?).Rilascio oggetti COM
risposta
non è certamente fatto automaticamente, e in alcuni casi può essere pericoloso farlo (chiamando Marshal.ReleaseComObject
) as described in this blog post.
Per gli oggetti COM In-Proc, spesso non è necessario rilasciare oggetti COM.
Per gli oggetti COM out-Proc, può essere importante rilasciarli, per evitare problemi come Office apps failing to shut down after automation from a .NET client.
In questo caso, mi piacerebbe seguire i consigli nel suddetto post sul blog collegato:
Se si utilizza un oggetto COM in maniera single-threaded con ambito allora si può tranquillamente chiamare ReleaseComObject su quel oggetto quando hai finito con esso.
Ma se si utilizza un oggetto COM da luoghi multipli o più thread in un'applicazione (o da altre applicazioni nello stesso processo), non si dovrebbe chiamare ReleaseComObject
È possibile utilizzare Marshal.ReleaseComObject: http://msdn.microsoft.com/de-de/library/system.runtime.interopservices.marshal.releasecomobject.aspx
C'è di più su questo [qui] (http://stackoverflow.com/questions/1827059/why-use-finalreleasecomobject-instead-of-releasecomobject) – StuartLC
Risparmia un po 'di tempo per indagare e sii paziente visto che gli articoli sono tutti difficili e noiosi, come http: // blogs.msdn.com/b/visualstudio/archive/2010/03/01/marshal-releasecomobject-considered-dangerous.aspx –