Problemas con la memoria
Publicado por juan pablo (17 intervenciones) el 14/05/2010 14:42:01
Hola: ya he puesto una nota anterior con este problema.
Hice una aplicacion ara migrar de un sistema a otro, y mi problema es que el uso de memoria crece hasta agotarla.
El programa consta de un formulario principal, que luego llama a un subproceso, este ejecuta una funcion de un modulo. Esta funcion toma la tabla de la BD origen y la recorre fila por fila procesando los datos y haciendo las inserciones correspondientes en la BD destino.
Por cada fila de la funcion principal, se disparan llamadas a otros procesos y funciones dentro del mismo modulo, que luego de ejecutarse obviamente se cierran.
El consumo de memoria (si no me equivoco) deberia por lo tanto mantenerse en el tiempo una vez que la tabla de datos origen ha sido cargada en memoria, pero qui esta el problema (como dije al principio) el consumo de memoria crece y crece hasta agotar la memoria virtual, por lo que considero que las variables delaradas en cada funcion adicional a la funcion principal, no esta liberando los recursos una vez que termina de ejecutarse (aclaro aca que hago los dispose correspondientes a cada comando y conexion de la base de datos e incluso los igualo a nothing)
Encontré esta funcion en internet para liberar memoria (para forzar al GB a hacerlo), pero tampoco me fue de utilidad:
'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
MessageBox.Show("Fallo en la limpieza de memoria. Mensaje: " & ex.Message)
End Try
End Sub
Si pueden ayudarme se los agradecere muchisimo.
PD: no entiendo si el problema es por usar subprocesos, o porque el GB no esta liberando la memoria correctamente.
MUCHAS GRACIAS
Hice una aplicacion ara migrar de un sistema a otro, y mi problema es que el uso de memoria crece hasta agotarla.
El programa consta de un formulario principal, que luego llama a un subproceso, este ejecuta una funcion de un modulo. Esta funcion toma la tabla de la BD origen y la recorre fila por fila procesando los datos y haciendo las inserciones correspondientes en la BD destino.
Por cada fila de la funcion principal, se disparan llamadas a otros procesos y funciones dentro del mismo modulo, que luego de ejecutarse obviamente se cierran.
El consumo de memoria (si no me equivoco) deberia por lo tanto mantenerse en el tiempo una vez que la tabla de datos origen ha sido cargada en memoria, pero qui esta el problema (como dije al principio) el consumo de memoria crece y crece hasta agotar la memoria virtual, por lo que considero que las variables delaradas en cada funcion adicional a la funcion principal, no esta liberando los recursos una vez que termina de ejecutarse (aclaro aca que hago los dispose correspondientes a cada comando y conexion de la base de datos e incluso los igualo a nothing)
Encontré esta funcion en internet para liberar memoria (para forzar al GB a hacerlo), pero tampoco me fue de utilidad:
'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
MessageBox.Show("Fallo en la limpieza de memoria. Mensaje: " & ex.Message)
End Try
End Sub
Si pueden ayudarme se los agradecere muchisimo.
PD: no entiendo si el problema es por usar subprocesos, o porque el GB no esta liberando la memoria correctamente.
MUCHAS GRACIAS
Valora esta pregunta
0