Formularios MDI
He encontrado un problema en visual basic 6.0 y que no he podido descifrar, es con los formularios MDI al cerrar el MDI Principal el procesos queda en cola en memoria, esto sucede solamente cuando dan clic en la POR del formulario y no cuando dan el procedimiento de Archivo-Salir.
1 respuesta
Respuesta de Roberto Alvarado
1
1
Roberto Alvarado, Desarrollador de aplicaciones en plataforma
En el evento Closing de la forma coloca el mismo código de l menu.
Hola,
El procedimiento que mencionas es en el Form_Unload y es correcto mientras no exista abierto un formulario o mientras no haya abierto uno.
Cuando abro un formulario realizo la siguiente validación:
Case ID_C_CLIENTES:
If SGH_Check_Entrance("frmCtlgClientes") = True Then
PassSecurityForm = True
Set frmActive = New frmCtlgClientes
Else
MsgBox "NO TIENE LOS PERMISOS NECESARIOS PARA ACCESAR A ESTE MODULO", vbCritical, "CONSULTE AL ADMINISTRADOR"
PassSecurityForm = False
End If
Si PassSecurityForm es True entonces frmactive.show
de lo contrario le asigno Nothing para limpiar memoria, pero nada, siempre queda en cola el proceso.
No se si hay que hacer un ciclo de limpieza por cada formulario que este o haya sido abierto.
Gracias.
El procedimiento que mencionas es en el Form_Unload y es correcto mientras no exista abierto un formulario o mientras no haya abierto uno.
Cuando abro un formulario realizo la siguiente validación:
Case ID_C_CLIENTES:
If SGH_Check_Entrance("frmCtlgClientes") = True Then
PassSecurityForm = True
Set frmActive = New frmCtlgClientes
Else
MsgBox "NO TIENE LOS PERMISOS NECESARIOS PARA ACCESAR A ESTE MODULO", vbCritical, "CONSULTE AL ADMINISTRADOR"
PassSecurityForm = False
End If
Si PassSecurityForm es True entonces frmactive.show
de lo contrario le asigno Nothing para limpiar memoria, pero nada, siempre queda en cola el proceso.
No se si hay que hacer un ciclo de limpieza por cada formulario que este o haya sido abierto.
Gracias.
Hola,
La función App. Exit no es propia de Visual Basic 6.0,me parece que esa es del .net o 9.0.
Gracias
La función App. Exit no es propia de Visual Basic 6.0,me parece que esa es del .net o 9.0.
Gracias
Si yo se, ese es el código que tiene en:
mnuSalir_click
MDIForm_Unload
Pero por alguna razón siempre queda cargado el proceso en memoria. Utilizo varios paquetes de controles adicionales para FTP, Skins, Frames y otros, no se si existe un código que los descargue de memoria.
Gracias
mnuSalir_click
MDIForm_Unload
Pero por alguna razón siempre queda cargado el proceso en memoria. Utilizo varios paquetes de controles adicionales para FTP, Skins, Frames y otros, no se si existe un código que los descargue de memoria.
Gracias
Supongo que estas usando threads y no los estas cerrando, y como hasta ahora mencionas que usas otros controles, tienes que revisar que un control de esos es el que se mantiene en la memoria.
Pues threads no estoy ocupando, lo que si ocupo son muchas variables de Tipo Objeto y toda mi conexión a base de datos se basa en Módulos de Clases, por lo cual heredo en los objectos las elementos de las clases.
Pero siempre las inicializo, por ejemplo
Set NewClass=nothing
set NewClass = new clsClase
NewClass.Function
Set NewClass=nothing
Y realizo lo mismo en el Form Unload de cada formulario, y los Initialize y Terminate de las clase hago lo mismo.
Asi que no se que es.
Gracias
Pero siempre las inicializo, por ejemplo
Set NewClass=nothing
set NewClass = new clsClase
NewClass.Function
Set NewClass=nothing
Y realizo lo mismo en el Form Unload de cada formulario, y los Initialize y Terminate de las clase hago lo mismo.
Asi que no se que es.
Gracias
¿Cuál es la forma principal, o en otras palabras desde donde inicias el programa en un modulo con un sub main? Es posible que estas haciendo el .end en una forma que has llamado desde otra y por eso te queda en memoria el programa.
No se si el componente FTP que usas lo estas abriendo y eso es lo que queda abierto...
No se si el componente FTP que usas lo estas abriendo y eso es lo que queda abierto...
Tengo un Modulo llamado mdlResource donde existe un Sub Main que carga el main Form:
Sub Main()
Load splashSGH
splashSGH.Show 1
End Sub
Este hace un proceso de carga, verifica usuario de login del Servidor y si es válido se conecta así:
If ConectSGH.Inicializar(TxtUser, txtPass) = "UserLoginFailed" Then
MsgBox "EL usuario y/o contraseña son incorrectos", vbCritical, "CORRIJA !!!"
Else
NameActUsr = UCase(TxtUser)
set connpublic=nothing
set connpublic=new adodb.connection
With ConnPublic
.ConnectionString = ConectSGH.Inicializar(TxtUser, txtPass)
.Open
End With
Set ActUsr= Nothing
Set ActUst= New mclSystemUsers
ActUsr.GetCodeUser
Set ActUsr= Nothing
Unload Me
Load MDIPrincipal
MDIPrincipal.Show
End If
El componente FTP simplemente se utiliza para Upload la base de datos a un servidor remoto vía Web. Más que todo visualiza la conexión por que el proceso se hace vía JAVA. Este control solo se ocupa una ves a la semana por lo que no creo que sea el causante de este problema.
Gracias de antemano.
Sub Main()
Load splashSGH
splashSGH.Show 1
End Sub
Este hace un proceso de carga, verifica usuario de login del Servidor y si es válido se conecta así:
If ConectSGH.Inicializar(TxtUser, txtPass) = "UserLoginFailed" Then
MsgBox "EL usuario y/o contraseña son incorrectos", vbCritical, "CORRIJA !!!"
Else
NameActUsr = UCase(TxtUser)
set connpublic=nothing
set connpublic=new adodb.connection
With ConnPublic
.ConnectionString = ConectSGH.Inicializar(TxtUser, txtPass)
.Open
End With
Set ActUsr= Nothing
Set ActUst= New mclSystemUsers
ActUsr.GetCodeUser
Set ActUsr= Nothing
Unload Me
Load MDIPrincipal
MDIPrincipal.Show
End If
El componente FTP simplemente se utiliza para Upload la base de datos a un servidor remoto vía Web. Más que todo visualiza la conexión por que el proceso se hace vía JAVA. Este control solo se ocupa una ves a la semana por lo que no creo que sea el causante de este problema.
Gracias de antemano.
¿Cómo cierras la aplicación? ¿A través de un menu salir? ¿O a través de la POR de la ventana?
¿En cada uno de los casos cual es el código que tiene en esos eventos?
¿En cada uno de los casos cual es el código que tiene en esos eventos?
Existe un menu que se llama MnuSalir. Al darle click ejecuto el siguiente código
private sub MnuSalir_Click()
ConectDS.DisConect_Server
Set ConectDS = Nothing
Set ConnPublic = Nothing
End
end sub
Y en el MDIForm_Unload hago exactamente lo mismo.
private sub MDIForm_Unload_Click()
ConectDS.DisConect_Server
Set ConectDS = Nothing
Set ConnPublic = Nothing
End
end sub
Saludes.
private sub MnuSalir_Click()
ConectDS.DisConect_Server
Set ConectDS = Nothing
Set ConnPublic = Nothing
End
end sub
Y en el MDIForm_Unload hago exactamente lo mismo.
private sub MDIForm_Unload_Click()
ConectDS.DisConect_Server
Set ConectDS = Nothing
Set ConnPublic = Nothing
End
end sub
Saludes.
Pues yo supongo que es ese el que queda pendiente por que al revisar el Administrador de Tareas me aparece como si todavía se estuviera ejecutando. Y ocupa entre 20 y 30 MB del archivo de paginación.
Slds.
Slds.
Si ejecutas el programa, ¿y le das salir sucede lo que describes? Porque un programa VB6 no ocupa 20 MB de la memoria a menos que este cargando en memoria un conjunto de registros de la base de datos muy grande.
Tienes que revisar que cosas estas haciendo al momento de inciar la aplicación para poder descubrir que es lo que pasa.
Tienes que revisar que cosas estas haciendo al momento de inciar la aplicación para poder descubrir que es lo que pasa.
El espacio que ocupa es de la memoria de paginación.
Por otro lado me he fijado que al abrir un formulario mediante una variable objeto, este espacio en memoria incrementa un 10 por cierto por decirlo, pero al cerrarlo este no disminuye ese mismo porcentaje.
Por ejemplo al Iniciar mi MDIPrincipal ocupe 21,458 KB de archivo de paginación, al abrir un formulario(este form no accesa a ninguna tabla, es solo el frmabout) este aumente a 23,500 KB. Pero al cerrar este formulario disminuye a 22,100. SIempre queda aumentado un porcentaje de memoria. Cada ves que abro un formulario lo hago mediante una variable de la siguiente manera:
DIm x as Form
set x = new frmAbout
x.show
Gracias de antemano por tu paciencia.
Por otro lado me he fijado que al abrir un formulario mediante una variable objeto, este espacio en memoria incrementa un 10 por cierto por decirlo, pero al cerrarlo este no disminuye ese mismo porcentaje.
Por ejemplo al Iniciar mi MDIPrincipal ocupe 21,458 KB de archivo de paginación, al abrir un formulario(este form no accesa a ninguna tabla, es solo el frmabout) este aumente a 23,500 KB. Pero al cerrar este formulario disminuye a 22,100. SIempre queda aumentado un porcentaje de memoria. Cada ves que abro un formulario lo hago mediante una variable de la siguiente manera:
DIm x as Form
set x = new frmAbout
x.show
Gracias de antemano por tu paciencia.
Null no seria, seria nothing por lo que es una variable de objeto, entonces quedaria algo asi:
x.show
Seguiria el siguiente codigo:
set x = nothing
Gracias de antemano.
x.show
Seguiria el siguiente codigo:
set x = nothing
Gracias de antemano.
- Compartir respuesta
- Anónimo
ahora mismo