Visual Basic.NET - LIBERAR ESPACIO DE MEMORIA AL CERRAR FORMULARIO EN VB.NET Y ASI EVITAR QUE SE CIERRE LA APLICACION

 
Vista:
sin imagen de perfil
Val: 38
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

LIBERAR ESPACIO DE MEMORIA AL CERRAR FORMULARIO EN VB.NET Y ASI EVITAR QUE SE CIERRE LA APLICACION

Publicado por JOSUE (13 intervenciones) el 19/09/2020 23:00:07
BUEN DIA

ESTOY HACIENDO UN SISTEMA EN VISUAL BASIC .NET CON SQL SERVER, EL PROBLEMA QUE TENGO QUE DESPUES DE UN TIEMPO EN USO EL SISTEMA ESTE SE CIERRA DE FORMA INESPERADA LO QUE HE NOTADO QUE CADA VEZ QUE SE CIERRA UN FORMULARIO NUNCA SE LIBERA LA MEMORIA DE USO EN EL PROCESO QUE USA AL MOMENTO DE EJECUTARSE EL MISMO. LO VERIFICO CON EL ADMINISTRADOR DE TAREA Y VA INCREMENTANDO LA CANTIDAD EN MEGABYTE Y NO LOGRO QUE SE LIBERE LA MEMORIA USADA AL CERRAR CADA FORMULARIO. DICHO SISTEMA LO TENGO RED, POR EL MOMENTO SOLO 3 COMPUTADORAS ESTAN USANDO EL SISTEMA.

NECESITO AYUDA QUE NO SE ME CIERRE DE FORMA INESPERADA EL SISTEMA Y QUE SE LIBERE LA MEMORIA O LOS RECURSOS QUE SE USA CADA VEZ QUE SE CIERRA UN FORMULARIO EN EL SISTEMA.
ESTOY TRABAJANDO CON MDIPARENT.

GRACIAS DE ANTEMANO
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Phil Rob
Val: 3.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

LIBERAR ESPACIO DE MEMORIA AL CERRAR FORMULARIO EN VB.NET Y ASI EVITAR QUE SE CIERRE LA APLICACION

Publicado por Phil Rob (937 intervenciones) el 21/09/2020 12:29:38
Hola,

Probablemente que en este Form, tienes algunas operador NEW (New SqlDataAdapter, New SQLCommand, New SQLCoonection, ...).
En principio, para conservar la memoria bien, a cada NEW, debe existir un método DISPOSE (MiAdapter.Dispose(), MiCommand.Dispose(), ...).
Claro, tienes que escribir Dispose() cuando el objeto deviene no necesario.
Por ejemplo :
1
2
3
4
5
6
7
8
Consulta = "SELECT * FROM " & NombreTablaEnDB
 
        MiAdapter = New SqlDataAdapter(Consulta, MiConexion)
 
        MiAdapter.Fill("UnaDataTable")   ' Los datos estan en la DataTable, MiAdapter no es todavía necesario
 
' ... ... ...
        MiAdapter.Dispose()

Espero que este te ayudará ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 38
Ha aumentado su posición en 3 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

LIBERAR ESPACIO DE MEMORIA AL CERRAR FORMULARIO EN VB.NET Y ASI EVITAR QUE SE CIERRE LA APLICACION

Publicado por JOSUE (13 intervenciones) el 21/09/2020 16:01:58
lastimosamente no me funciono. sigue aumentando cada vez que abro un formulario del sistema es decir inicia con 32 mb el uso de memoria y cuando inicia el mdiparent ya aparece 63 mb y cuando ya ejecuto un formulario para poder buscar o almacenar informacion sigue aumentando el uso de memoria y cuando llega a 800 mb o 1gb o cuando colapsa la memoria es cuando se cierra el sistema de forma inesperada.


gracias por la ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Phil Rob
Val: 3.196
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

LIBERAR ESPACIO DE MEMORIA AL CERRAR FORMULARIO EN VB.NET Y ASI EVITAR QUE SE CIERRE LA APLICACION

Publicado por Phil Rob (937 intervenciones) el 21/09/2020 16:50:19
Tambien, puede probar el Dispose() para todo Form que se cerrar :

1
2
3
4
5
6
7
8
9
10
11
12
13
' En mi Form5
        Form3.Show()
 
 ' ... ... ...
        Form3.Close()
        Form3.Dispose()  ' este es permitido aqui
 
 
'Y en este Form5, en el evento Closed :
 
    Private Sub Form5_FormClosed(sender As Object, e As FormClosedEventArgs) Handles Me.FormClosed
        Me.Dispose()   ' este es permitido aqui
    End Sub

No creo realmente que este es la solución ...
Cuidad, no es instantáneamente vacía la memoria. El sistema (el GarbageCollector) trabaja cuando este le gusta. Pero usar el Dispose() es lo mostrar la memoria que puede obtener a este momento. Es decir que tienes que esperar que el sistema sze cierra.

Quizá tienes que verificar las cantidades de datos que cargas con las consultas SQL, Verificar que no agregas DataTable inútil en DataSet.

No sé si puedo testar tu proyecto en mi sistema ... Si no es demasiado grande (y si puedo crear un DB para testar), puedes lo enviar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar