COM+ y VB.NET

08/08/2005 - 13:46 por Juan Cuello | Informe spam
Hola,

Tengo programado un servicio en VB.NET que utiliza una DLL de COM+. En
concreto la DLL que permite el envío y ver el estado de faxes. El problema
está en que cada vez que instancio un objeto de la DLL el servicio empieza a
consumir memoria sin control. Anque ejecute el GC.Collect() acumula más
memoria de la que libera.
Incluso he puesto los objetos a nothing yo mismo a mano y mejora algo
pero no demasiado.

¿Alguien sabe cual es el problema y/o la solución?

Es urgente... el cliente me tiene en el punto de mira... :(
 

Leer las respuestas

#1 Tristan
08/08/2005 - 22:40 | Informe spam
Yo no soy un experto en COM+, pero puedo decirte que en general para liberar
objetos COM, debes utilizar Marhsal.ReleaseComObject. Pero respecto a lo que
decías, GC.Collect debería hacer lo mismo aunque de forma más costosa. La
asignación a nothing, no te va a servir de nada, excepto en las variables
que no hayan salido de ámbito antes de invocar al GC.

Por otro lado, nunca me canso de decir que cuando se analiza el consumo de
memoria, tanto de .net como del propio windows, hay que pensar que muchas
veces las apariencias no son reales. .Net está optimizado para no liberar la
memoria innecesariamente, puesto que es un proceso costoso. Si ninguna otra
aplicación, el consumo de memoria "aparente" seguirá creciendo. En
aplicaciones winforms, se comrpueba que en cuanto se minimiza y restaura la
aplicación, el supuesto consumo de memoria se reduce de forma radical, lo
mismo ocurrirá con tu servicio, con la diferencia de que en estos no es
fácil hacer lo mismo. Solo se podrá comprobar el consumo real de memoria,
cuando esta realmente empiece a faltar. Si se observa que el servicio sigue
consumiendo más, una vez consumida la memoria física, entonces si deberías
buscar el lugar donde se estén perdiendo recursos.

Juan Carlos Badiola
MVP - C#

Preguntas similares