2012-09-26 7 views
5

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

+1

C'è di più su questo [qui] (http://stackoverflow.com/questions/1827059/why-use-finalreleasecomobject-instead-of-releasecomobject) – StuartLC

+1

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 –

risposta

3

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