30 noviembre 2005

Liberar Memoria Con Vb .NET

Posted in VB.NET Develop at 4:16 pm por jabelSan

Chequeando una aplicación que estoy desarrollando, he verificado el uso excesivo de memoria que consumen las aplicaciones desarrolladas en NET FrameWork.

Despues de probar que descargaba correctamente todos los objetos que utiliza la aplicación mediante el uso del Dispose() y especificamentes los objetos DataSet y DataTable, ya que estos hay que descargarlos de memoria manualmente, observe que la memoria seguia sin descargarse correctamente. Por lo que probe con el GC (Garbage Collector) para forzar la liberación de memoria, pero el resultado fue identico.

Despues de probar, recompilar, optimizar el código fuente opte por “obligar” a la aplicación (al proceso) por completo a liberar la memoria no necesaria. Para ello me enfunde en el manejo de las Api’s, localizando SetProcessWorkingSetSize, que fuerza al proceso dado a liberar la memoria no usada (como cuando minimizas la aplicacion). Para ello me desarrolle la funcion ClearMemory, accesible desde cualquier punto de la aplicación que me permite optimizar el uso de memoria por parte del NET FrameWork.

‘Declaración de la API
Private Declare Auto Function SetProcessWorkingSetSize Lib “kernel32.dll” (ByVal procHandle As IntPtr, ByVal min As Int32, ByVal max As Int32) As Boolean

‘Funcion de liberacion de memoria
Public Sub ClearMemory()

    Try

      Dim Mem As Process
      Mem = Process.GetCurrentProcess() SetProcessWorkingSetSize(Mem.Handle, -1, -1)

    Catch ex As Exception
    ‘Control de errores
    End Try

End Sub

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.