C# - Limpando COM Objects da memória

Quando trabalhamos com aplicações comuns criadas em C#, não precisamos nos preocupar em destruir objetos criados em memória, pois o Garbage Collector nativo do C# faz este trabalho automaticamente.

Porém, quando trabalhamos com objetos COM (Objetos não nativos do C#) o funcionamento é diferente, pois o C# não sabe gerenciar este tipo de objeto. Logo, é necessário encerrá-los de uma forma “não convencional”, utilizando a classe Marshal.

A Classe Marshal nos traz todos os métodos necessários, para que consigamos fazer com que o C# consiga gerenciar os COM Objects. A Microsoft define a classe Marshal como:

Fornece um conjunto de métodos para a alocação de memória não gerenciado, a cópia de blocos de memória não gerenciados, e convertendo conseguiu tipos não gerenciados, bem como outros métodos usados ​​variado ao interagir com código não gerenciado. (Microsoft 31-03-2015)

É simples utilizar a classe Marshal para liberar objetos COM. Abaixo temos um exemplo utilizando o componente spdNFeX:

{ Instanciando COM Object }

spdNFeX _spdNFeX = new spdNFeX();
try {
_spdNFeX.DiretorioLog = “C:\nfeConfig” ;
} finally {

{ Informando ao Garbage Collector que esse objeto deve ser gerenciado }
Marshal.FinalReleaseComObject(_spdNFeX);

{ Passando null ao Objeto para que o Garbage Collector saiba que deve ser recolhido da memória }
_spdNFeX = null;
}

Note que para trabalhar com os objetos COM é necessário que se informe ao Garbage Collector o objeto a se gerenciar, uma vez que ele não o entende como um objeto nativo.

Por fim, deixamos em anexo a este post um projeto de demonstração, que mostra como trabalhar com objeto COM Object e a Classe Marshal.

Interessado em mais post’s C#, não deixa de verificar os Seguintes Post’s:

Referencias:

Microsoft 31-03-2015:

https://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal(v=vs.100).aspx

https://tsdn.tecnospeed.com.br/files/render/a/GKy6V-_IwiY/m/2Aal0HUq8We8BPmCKaB7-cF1R1geE75l39lGwou-6qFHxXKvOSRNxiBn7DybBIrW5jj0I5cepQg