Fecha actual Mar Jul 01, 2025 4:04 pm

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 8 mensajes ] 
Autor Mensaje
NotaPublicado: Dom Dic 16, 2007 6:04 pm 

Registrado: Jue Ago 23, 2007 2:47 pm
Mensajes: 23
Saludos...


Hoy me bajo la curiosidad de saber cuanta memoria utilizan mis programas... Doble click sobre un programa de gestion de bodega hecho en C3... luego click derecho sobre la barra de herramientas... luego escojo administrador de tareas... busco la pestaña PROCESOS... ubico el programa hecho en C3... y veo cuanta memoria utiliza...


Solo por jugar... movi la ventana del programa hecho en c3 por toda la pantalla... y veo con sorpresa que el consumo de memoria empieza a subir y subir... ¿Tendre otra vez una fuga de recursos?... Comienzo a revizar uno de los modulos mas simples del programa mencionado... Vuelvo a repitir toda la operacion y el consumo de memoria sube y sube... Opto por hacer una prueba desde "cero", a lo mas un formulario en pantalla... y comienzo solo a moverlo por pantalla y monitorear el uso de memoria...

- 3236 KB
- 3240 KB
- 3244 KB
....
- 3892KB

y asi... apago el computador... repito la operacion y se repite la misma secuencia... Habre hecho esto unas 8 veces.. y el consumo sube a una tasa de 4KB... He estado ya un poco mas de una hora en este asunto, buscando un error mio o de C3... y concentrado en este problema se me ocurre apretar el boton minimizar y sorpresa...

- 892 KB... el consumo de memoria bajo en forma considerable....


:shock: ... en fin... me he llevado un susto...
He sido meticuloso en no provocar fuga de recursos y memoria... pero aun asi existe la probabilidad cierta que haya cometido un error o una omision en alguna parte... y que por tanto si exista esa fuga memoria... pero... ¿Como puedo monitorear si existe fuga?... ¿Que herramienta recomiendan para quitar esa duda existencial ? :lol:

En fin... sigo adelante... o me detengo y vuelvo a revisar todo???... el problema es que no tengo ni herramienta ni parametro para evaluar el asunto.....


Saludos...
Rodrigo H. Soto
Santiago - Chile


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Dom Dic 16, 2007 9:37 pm 

Registrado: Jue Ago 23, 2007 2:47 pm
Mensajes: 23
Sigo experimentando...


Como indique utilizo el Administrador de Tareas de Window para determinar el uso de memoria de los procesos...

Esta vez probe lo siguiente.
- Cree un formulario..
- El Formulario contiene un solo objeto.
- El objeto en cuestion se hereda de TWinControl.

El codigo del objeto es el siguiente...

#include 'Gui.ch'
//----------------------------------------------------
Class TTest_Memoria From TWinControl

Public:

// Metodos principales ---------------
Method Create Constructor
Method PaintWindow
Method Destroy
EndClass


//----------------------------------------------------
Method Create( oParent ) Class TTest_Memoria
Super:Create( oParent )
::Brush:Color := clWhite
::ClientWidth := 370
::ClientHeight := 160
Return Self


//----------------------------------------------------
Method PaintWindow( nDC ) Class TTest_Memoria
Return Nil


//----------------------------------------------------
Method Destroy() Class TTest_Memoria
Super:Destroy()
Return Nil

Como se observa todo simple...

Compilo el codigo. ejecuto el programa y monitoreo el uso de memoeria...

- Primera lectura 3.256 KB...

Pero esta vez lo unico que hago es pasar el mouse por encima del formulario que he creado... repito lo unico que hice fue pasar por encima el mouse y solo eso...

Lecturas.
- 3.256 KB
- 3.260 KB
......
- 6.204 KB... despues de tres minutos de solo hacer eso... pasar el mouse sobre el formulario...

Utilizo el EditPlus para escribir el codigo... y este programa a lo mas consumia 4.756 KB. y por cierto... realiza una mayor cantidad de cosas que el codigo arriba transcrito...



Bueno eso... sigo experimentando..
Saludos
Rodrigo Soto
Santiago - Chile..


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Dom Dic 16, 2007 10:48 pm 

Registrado: Jue Ago 23, 2007 2:47 pm
Mensajes: 23
Saludos...

Me esta preocupando el asunto... por ahora el programa que estoy construyendo lo ocupo para asuntos puntuales y por poco tiempo... sin embargo, mi idea es implementarlo para uso continuo...

en fin.... dejo el archivo con el que estoy experimentando...


Saludos
Rodrigo Soto
Santiago - Chile


Adjuntos:
Memoria.rar [3.49 KiB]
333 veces
Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Dic 17, 2007 6:15 am 

Registrado: Jue Ago 23, 2007 2:47 pm
Mensajes: 23
Sigo con el asunto.... realmente me tiene preocupado...


El formulario principal de la aplicacion que estoy construyendo es no modal... pero el resto (unos 40 formularios)... todos son modales... es decir los muestro con ShowModal()....

Pues bien...
- Formulario principal se puede minimizar a la barra de tareas..
- El segundo formulario (el del ejemplo que deje) es MODAL...
- Resultados... la aplicacion come y come y come memoria a una razon de 8KB...

Segundo intento...
- Formulario principal se puede minimizar a la barra de tareas..
- El segundo formulario (el ejemplo que deje) es ahora NO MODAL... lo muestro en pantalla solo con Show()
- Resultados... la aplicacion come y come y come memoria a una razon de 8KB...
- Pero esta vez minimizo el formulario principal ( y esto se puede porque el segundo formulario es no modal)... y sorpresa... ya iba en los 10.000 y tantos KB de memoria consumida y luego de minimizar el formulario principal bajo a poco mas de 388KB...

Algo muy especial debe tener la minimizacion del formulario principal para que realice tan notorio ahorro de memoria... pero esto es valido solo si los demas formularios son NO MODALES...

El asunto es que... necesito trabajarlos como MODALES y que al cerrar dichos formularios... me devuelva la memoria utilizada...

Por otro lado... algo muy extraño debe suceder que para tan solo pasar una y otra vez el mouse sobre el formulario comience a consumirse memoria de forma continua...

Ha esta altura ya me duele la cabeza.... vere si reconvierto todo a NO MODAL y aprovechar (¿la ventaja?) que el cierre del formulario principal provoca un ahorro de memoria... solucion a medias... porque si el usuario no se le ocurre minimizar... la aplicacion estara comiendo y comiendo memoria...


pero bueno...
Saludos
R. Rodrigo H. Soto
Santiago - Chile


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Dic 17, 2007 9:04 am 
Site Admin
Avatar de Usuario

Registrado: Jue Oct 06, 2005 10:49 pm
Mensajes: 655
Ubicación: España - Salamanca
Rodrigo,

Así no llegarás a ninguna parte, no sacarás ninguna conclusión en claro, C3 tiene un gestor de memoria que hace que cada cierto tiempo se libere la memoria no usada, por eso verás bajones repentinos y luego irá subiendo poco a poco hasta que se vuelve a producir un nuevo bajón. Lo único que podrías sacar en claro es que después de un buen rato la memoria no pase de un tope alcanzado, es decir, que tenga subidas y bajadas dentro de unos límites. C3 no pierde memoria y si hubieses cometido algún error (tendría que ser desde algún módulo que hayas hecho en C y usando las funciones del API de gestión de memoria). La manipulación de recursos apenas consume memoria ya que Windows los cachea, es decir, si creas una fuente y no la destruyes y la vuelves a crear... Windows reutiliza la primera que creó, es muy difícil tirar el sistema abajo por ese motivo, en los viejos sistemas de 16 bits sí era posible.

_________________
Un saludo,
Bruno Cantero
www.c3compiler.com


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Dic 17, 2007 2:27 pm 

Registrado: Jue Ago 23, 2007 2:47 pm
Mensajes: 23
Saludos...

Perfecto... las pruebas que realice fueron a lo mas de pocos minutos... vere que es lo que sucede en lapsos mas extensos.

Tambien como señalas algunas partes las he hecho en C... pero me di bastante tiempo para testearlas aisladamente para determinar si se producian fugas de memoria y solo una vez convencido que no sucedia... recien las incorporaba al programa principal.

Por otro lado.. gran parte del programa lo trabaje en WIN98 y esto porque donde pienso utilizar el programa utilizan en su mayoria WIN98. Para testear que no estuviese cometiendo un error, utilizaba el FREERAM... en ese escenario era notorio cuando consumia memoria y no la devolvia.. era solo mirar el FREERAM y sabia que habia cometido algun error.

Este fin de semana probe el programa en WinXP, de hecho funciono perfecto por bastante tiempo... hasta que tuve la ocurrencia de mirar el uso de memoria y ahi me bajo el panico...

Hoy dia aproveche de preguntar a algunos usuarios si han tenido algun problema con el programa... y no manifestaron ninguna queja...


Pero bueno sigo adelante..... en todo caso... es curioso que solo el movimiento del mouse genere consumo de memoria, mientras que la misma accion para otros programas aquello no sucede.... te dejo aquello como una inquietud...


Saludos...
R.Rodrigo H. Soto
Santiago - Chile


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Dic 17, 2007 6:23 pm 
Site Admin
Avatar de Usuario

Registrado: Jue Oct 06, 2005 10:49 pm
Mensajes: 655
Ubicación: España - Salamanca
Rodrigo H. Soto escribió:
..... en todo caso... es curioso que solo el movimiento del mouse genere consumo de memoria, mientras que la misma accion para otros programas aquello no sucede.... te dejo aquello como una inquietud...
Así es, el hecho de mover el ratón hace que se esté generando el evento OnMouseMove y que se estén creando una serie de variables a nivel de código xbase para que se pueda usar desde PRG y realizar acciones al responder a este evento. Esto no pasa en otros lenguajes compilados (C, Pascal, etc) ya que no necesitan crear un escenario especial para lanzar eventos. Piensa que la GUI de C3 está escrita en C++ y casi para cada cosa en la que se permita reaccionar desde PRG hay que montar una capa para subir a nivel de xbase y luego volver a descender hasta C++ y devolver los resultados. Yo te aseguro que puedes dejar correr una aplicación días y días y no te perderá memoria (a menos que hayas comentido un error).

_________________
Un saludo,
Bruno Cantero
www.c3compiler.com


Arriba
 Perfil  
Responder citando  
 Asunto:
NotaPublicado: Lun Dic 17, 2007 6:41 pm 

Registrado: Jue Ago 23, 2007 2:47 pm
Mensajes: 23
Saludos...


Ahora realice pruebas mas extensas... un poco mas de dos horas... La lectura inicial fue de 3000 y algo de KB de memoria, para luego estabilizarse en los 15.668KB... por supuesto realice mas cosas que solo pasar el mouse... luego de aquellos 15.668KB... el asunto quedo casi fijo... unos 4KB subia, pero luego bajaba... en fin... me quedo tranquilo... llegado un "techo"... y para el tiempo en ejecucion de la aplicacion.. no se consumio mas memoria...


Bueno eso... :D
Saludos...
R.Rodrigo H.Soto
Santiago - Chile


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 8 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Buscar:
Saltar a:  
cron