-
Hola, estamos desarrollando una aplicación de escritorio que tiene bastantes formularios, con los que el incremento de la memoria en cada una de las aperturas es considerable. El problema es que no conseguimos liberar memoria y ya hemos probado a utilizar funciones delapi, con el setworkingprocess, a recorrer los controles para ponerlos a nothing haciendo antes un dispose y nada, sigue consumiendo muchisima memoria, no se libera apenas nada.
¿Alguien tiene alguna solución? Ya llevamos tiempo trantando de resolverlo y nada.
Gracias de antemano.
-
Hola compañeros.
Un pequeño detalle,(igual ya habeis caido o no usais imagenes), tuve un problema parecido, y venia del uso de imagenes que pesaban demasiado, tu las reduces al tamaño del control pero el recurso de la imagen pesa lo mismo.
Bueno es una tonteria pero ese fue mi problema
Tambien se me ocurre que tal vez habeis pasado por alto algun proceso o rutina que genera un bucle y eso hace que la cosa se descontrole.
Saludos
Luis
-
Hola Velez, gracias por la respuesta. Pero el problema creemos en que está en que cada vez que abrimos un formulario, se crean muchos controles y al cerrarse no se eliminan ni la 4 parte. No sabemos si es un problema del .Net que no elimina los propios controles que se crean en el diseñador o que estamos haciendo algo mal???
-
Hola, es memoria RAM o virtual?? la verdad .NET es pesado ya de no hacer nada, pero no tiene porque subirte tanto...¿y cuando te pasa eso en el proyecto ya compilado a .exe o cuando lo estas ejecutando desde el visual basic? fijate de descargar y cerrar todo lo que abriste todos los objetos, los timers, lo que sea....fijate qeu realmente estas descargando el formulario y no lo estes ocultando..porque sige en memoria..hace mucho vi un codigo para liberar memoria es este, probalo, yo he visto desde el administrador de tareas que baja mucho la memoria usada.
Código:
Private Declare Auto Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal procHandle As IntPtr, ByVal min As Int32, ByVal max As Int32) As Boolean
y en el Load lo llamas:
Código:
If (Environment.OSVersion.Platform = PlatformID.Win32NT) Then
Dim Mem As Process = Process.GetCurrentProcess()
SetProcessWorkingSetSize(Mem.Handle, -1, -1)
End If
saludos.
-
Hola seba123neo, es la memoria virtual.
La funcion de api que me dices ya la estamos utilizando en todos los formularios y si reduce, pero no es suficiente.
El problema, como digo, creo que son los objectos de usuario que se quedan abiertos, es decir, que aunque cierres siguen estandoy no tenemos ni idea como destruirlos.
No sé si tiene que ver, tenemos una funcion que carga los datos en el grid, vinculandolos a través de un dataset. El problema es que éste dataset no podemos liberarlo porque sino no veríamos los datos.
¿Puede ser por esto???