none
Rendimiento, destruir referencia RRS feed

  • Pregunta

  • Estoy utilizando desde un motor de secuencia una biblioteca de un tercero que no puedo modificar y en cada iteración aumenta el consumo de memoria. Probé sin embargo usando una biblioteca creada por mí no sucede, realice la prueba usando el monitor de rendimiento de Windows y usando la biblioteca de un tercero crecía el uso de la RAM exponencialmente mientras que con la mía se mantenía constante.

    Quisiera saber de forma puedo hacer uso de las funciones de la api de forma que cuando termine la iteración pueda garantizar que se destruyó correctamente.

    Usando el GC.Collect no resolvió el problema.

    Estuve pensando en usar Application Domains o un thread.

     

    Por favor alguna sugerencia

    Muchas gracias

    martes, 18 de abril de 2017 16:54

Todas las respuestas

  • Estuve pensando en usar Application Domains o un thread.

    El Thread no resolverá nada en cuanto a consumo de memoria. Pero el AppDomain, sí. Puedes cargar la DLL (que presumo es una Referencia de .NET, no un P/Invoke) dentro del AppDomain, y cuando termines de usarla llamas al Unload del AppDomain, y esto la descarga volviendo a poner a disposición de tu programa toda la memoria que antes consumía ese ensamblado. Ojo, si la DLL tiene alguna fuga de memoria no-gestionada, ésta sí que podría perderse a pesar de descargar el AppDomain. Solo la memoria de .Net es la que queda protegida mediante este mecanismo.
    martes, 18 de abril de 2017 20:56