2012-09-26 14 views
5

Agregué una referencia en un proyecto de Visual Studio a una biblioteca COM. Ahora cuando creo y me opongo a un método, ¿se liberará automáticamente este objeto COM cuando el programa abandone ese método? ¿O debería liberar siempre estos objetos manualmente? (¿ReleaseComObject o FinalReleaseComObject?).Liberación de objetos COM

+1

Hay más en esta [aquí] (http://stackoverflow.com/questions/1827059/why-use-finalreleasecomobject-instead-of-releasecomobject) – StuartLC

+1

Ahorre tiempo para investigar, y sea paciente ya que los artículos son difíciles y aburridos, como http: // blogs.msdn.com/b/visualstudio/archive/2010/03/01/marshal-releasecomobject-considered-dangerous.aspx –

Respuesta

3

Ciertamente no se hace de forma automática, y en algunos casos puede ser peligroso hacerlo (llamando Marshal.ReleaseComObject) as described in this blog post.

Para los objetos COM en Proc, a menudo no es necesario liberar objetos COM en absoluto.

Para los objetos COM Out-Proc, puede ser importante liberarlos, para evitar problemas como Office apps failing to shut down after automation from a .NET client.

En este caso, me gustaría seguir los consejos en el blog vinculado anteriormente:

Si está utilizando un objeto COM de manera restringidos, de un solo subproceso entonces se puede llamar de forma segura en ese ReleaseComObject objeto cuando haya terminado con él.

Pero si está utilizando un objeto COM desde múltiples lugares o varios subprocesos en su aplicación (o de otras aplicaciones en el mismo proceso), no debe llamar ReleaseComObject

Cuestiones relacionadas