qué hace win al minimizar un programa que libera memoria?

Consultas, trucos, consejos. Todo sobre Clarion en todas sus versiones
jlviejo
Novato
Mensajes: 20
Registrado: Dom Feb 06, 2011 6:52 pm
Contactar:

qué hace win al minimizar un programa que libera memoria?

Mensaje por jlviejo » Lun Mar 14, 2011 7:28 pm

tengo meses batallando con un app que usa un sdk y que me incrementa la ram casi infinitamente.

hoy x la mañana vi un tip en el ngs/sv que dice que los programas de clarion no liberan memoria como debieran y que como workaround se medio corrigen al minimizarse y volverse a usar.

de hecho funcionó para mi programa, en otras palabras, el sdk no era el problema, ni yo tampoco sino clarion.

ahora las preguntas son:

¿qué hace windows al minimizar un exe de clarion para que libere la memoria?

¿por qué los exe de clarion no la liberan como los de vstudio?

¿existe un ptss sobre éste problema?

gracias


Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: qué hace win al minimizar un programa que libera memoria

Mensaje por Mauricio » Lun Mar 14, 2011 7:37 pm

Creo haber leido hace un buen tiempo sobre ese problema. Con qué versión de Clarion estás trabajando? Eso te pasa con C7 o también con versiones anteriores?
Desconozco si hay un PTSS al respecto, sería interesante saberlo.
Obviamente el garbage collection es distinto al de VS, la respuesta al por qué supongo que solo SV la tiene.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

jlviejo
Novato
Mensajes: 20
Registrado: Dom Feb 06, 2011 6:52 pm
Contactar:

Re: qué hace win al minimizar un programa que libera memoria

Mensaje por jlviejo » Lun Mar 14, 2011 8:22 pm

Mauricio escribió:Creo haber leido hace un buen tiempo sobre ese problema. Con qué versión de Clarion estás trabajando? Eso te pasa con C7 o también con versiones anteriores?
Desconozco si hay un PTSS al respecto, sería interesante saberlo.
Obviamente el garbage collection es distinto al de VS, la respuesta al por qué supongo que solo SV la tiene.
uso la última de 7,,,,, si te vas a lo básico,,,,, en que está hecho clarion?,,,,, un alto porcentaje debe estar en lenguajes de ms,,,, ya no existen los socios aquellos que hacian compiladores fumados de modula2 y similares.

regresando, si clarion esta hecho en c/c++ de ms debe usar el garbage collection que c/c++ usa, o no?

no le encuentro sentido al por que el garbage collection no funciona y mucho menos a que ningún porgramador se queje de que no funciona.

al parecer el truco de minimizar/expandir no funciona en w7.

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: qué hace win al minimizar un programa que libera memoria

Mensaje por Mauricio » Lun Mar 14, 2011 8:25 pm

La base de Clarion no es Modula-2?
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

jlviejo
Novato
Mensajes: 20
Registrado: Dom Feb 06, 2011 6:52 pm
Contactar:

Re: qué hace win al minimizar un programa que libera memoria

Mensaje por jlviejo » Lun Mar 14, 2011 8:35 pm

Mauricio escribió:La base de Clarion no es Modula-2?
no sé pero creo que estas hablando de algunas partes de cfd 3.11.

por qué usar m2 si c/c++ están en la punta de la navaja? además de bibliotecas, debuggers, perfomance analyzers, etc, etc,

no sé.

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: qué hace win al minimizar un programa que libera memoria

Mensaje por Mauricio » Lun Mar 14, 2011 8:49 pm

Es una buena pregunta para SV, aunque dudo que obtengas alguna respuesta. El runtime de Clarion no ha cambiado mucho entre C6 y C7, más que nada el IDE es el que lleva el gran cambio. Que el #develop esté hecho en C++ no implica que las dlls de Clarion estén compiladas con él, sería interesante saber qué es lo que utilizan para generarlas.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

Avatar de Usuario
Mauricio
Desarrollador de Clarion
Mensajes: 1125
Registrado: Dom Feb 06, 2011 9:34 am
Ubicación: España
Contactar:

Re: qué hace win al minimizar un programa que libera memoria

Mensaje por Mauricio » Lun Mar 14, 2011 9:15 pm

Estuve averiguando algo más.
Parece ser que la liberación de memoria es algo que hace el sistema operativo cuando minimizás el programa. Este asume que la aplicación no va a ser usada por un rato y es ahí cuando libera.
Mauricio, básicamente usando Clarion 6.3
www.tdcsoftware.com y www.clarioneros.com/blog

jlviejo
Novato
Mensajes: 20
Registrado: Dom Feb 06, 2011 6:52 pm
Contactar:

Re: qué hace win al minimizar un programa que libera memoria

Mensaje por jlviejo » Lun Mar 14, 2011 9:41 pm

Mauricio escribió:Estuve averiguando algo más.
Parece ser que la liberación de memoria es algo que hace el sistema operativo cuando minimizás el programa. Este asume que la aplicación no va a ser usada por un rato y es ahí cuando libera.
ok,,, y por que no la hace clarion sí es tan evidente?

por qué sí lo hace vs y borland?
no me vayas a decir que sv se le olvidó.
qué nos falta? cuál es el impedimento?
cómo se hace?
por qué nadie se queja?
es intracendente?
pancho carabez debe saber, le apasionan estos temas.

LeoPalomares
Ayudante de Santa
Mensajes: 53
Registrado: Lun Feb 07, 2011 10:50 pm
Contactar:

Re: qué hace win al minimizar un programa que libera memoria

Mensaje por LeoPalomares » Lun Mar 14, 2011 10:38 pm

La memoria que reporta el Task Manager es su "working set" y este no es una representación fiable de la memoria consumida por la aplicación, sino de la aplicación solicitada por la aplicación al sistema operativo pero puede ser que una buena parte de esta memoria no se use (la memoria que realmente está usando la aplicación está representada por los "private bytes", el "working set" es la memoria solicitada por la aplicación lo que no es lo mismo que la memoria usada). Cuando el SO necesita memoria para otra aplicación "solicita" a las aplicaciones que están en segundo plano (ojo, en segundo plano, que no es lo mismo que minimizadas) que liberen la ram que tienen asignada y que no utilizan.
Por otro lado, cuando una aplicación es minimizada el sistema operativo remapea la mayor cantidad de memoria utilizada por la aplicación a disco (page file) asumiendo que si la aplicación es minimizada no será usada inmediatamente y, por lo tanto, la memoria física se puede usar para otra aplicación.
En este proceso de remapeo reclama la memoria no usada y es por eso que cuando se maximiza la aplicación generalmente el valor del working set es menor que el que tenia antes de ser minimizada.

El compilador puede ser más o menos amigable con el sistema operativo liberando la memoria en cuanto no la necesite pero la asignación y liberación de memoria es un proceso costoso y, además, es más eficiente contar con memoria continua que fragmentada por lo que las aplicaciones suelen "pedir" memoria pero no liberarla automáticamente.
Por ejemplo el memory manager de .net solicita memoria de a trozos bastante grandes justamente para minimizar la fragmentación pero después el garbage collector se encarga de liberarla y, de ser posible, retornársela al sistema operativo.
Otra aplicación que suele hacer un uso a lo bruto de la memoria es el sql server, el cual siempre intenta apropiarse de la mayor cantidad de ram posible y no la libera por más que no la esté usando a menos que el sistema operativo se lo solicite.

El compilador de Clarion intenta minimizar la gestión de memoría quedándose con la memoria asignada hasta que el sistema operativo la reclame. Esto se puede ver muy facilmente rellenando una queue con un par de millones de registros, vaciándola y volviéndola a rellenar.

La mejor forma de ver que pasa con el consumo de memoria es monitorizarla, hay contadores específicos que dan un panorama muy claro de como evoluciona la asignación y consumo de memoria.
Por cierto, el task manager no es de lo mejor para ver esta información, les recomiendo que usen el process explorer de SysInternals.

Más cosas, el tema del rebase de dlls también ayuda notablemente a minimizar el working set inicial de la aplicación, el porque? en otro post si es que interesa.

Por último, Jose si tu aplicación incrementa el consumo de memoria indefinidamente revisá que no tengas un memory leak por algún lado. No es normal, el compilador de clarion, si bien es mejorable, está bastante sólido como para achacarle este tema.

Por cierto, #develop está escrito en C#
Saludos!!!

Leo Palomares

jlviejo
Novato
Mensajes: 20
Registrado: Dom Feb 06, 2011 6:52 pm
Contactar:

Re: qué hace win al minimizar un programa que libera memoria

Mensaje por jlviejo » Lun Mar 14, 2011 11:08 pm

LeoPalomares escribió:La memoria que reporta el Task Manager es su "working set" y este no es una representación fiable de la memoria consumida por la aplicación, sino de la aplicación solicitada por la aplicación al sistema operativo pero puede ser que una buena parte de esta memoria no se use (la memoria que realmente está usando la aplicación está representada por los "private bytes", el "working set" es la memoria solicitada por la aplicación lo que no es lo mismo que la memoria usada). Cuando el SO necesita memoria para otra aplicación "solicita" a las aplicaciones que están en segundo plano (ojo, en segundo plano, que no es lo mismo que minimizadas) que liberen la ram que tienen asignada y que no utilizan.
Por otro lado, cuando una aplicación es minimizada el sistema operativo remapea la mayor cantidad de memoria utilizada por la aplicación a disco (page file) asumiendo que si la aplicación es minimizada no será usada inmediatamente y, por lo tanto, la memoria física se puede usar para otra aplicación.
En este proceso de remapeo reclama la memoria no usada y es por eso que cuando se maximiza la aplicación generalmente el valor del working set es menor que el que tenia antes de ser minimizada.

El compilador puede ser más o menos amigable con el sistema operativo liberando la memoria en cuanto no la necesite pero la asignación y liberación de memoria es un proceso costoso y, además, es más eficiente contar con memoria continua que fragmentada por lo que las aplicaciones suelen "pedir" memoria pero no liberarla automáticamente.
Por ejemplo el memory manager de .net solicita memoria de a trozos bastante grandes justamente para minimizar la fragmentación pero después el garbage collector se encarga de liberarla y, de ser posible, retornársela al sistema operativo.
Otra aplicación que suele hacer un uso a lo bruto de la memoria es el sql server, el cual siempre intenta apropiarse de la mayor cantidad de ram posible y no la libera por más que no la esté usando a menos que el sistema operativo se lo solicite.

El compilador de Clarion intenta minimizar la gestión de memoría quedándose con la memoria asignada hasta que el sistema operativo la reclame. Esto se puede ver muy facilmente rellenando una queue con un par de millones de registros, vaciándola y volviéndola a rellenar.

La mejor forma de ver que pasa con el consumo de memoria es monitorizarla, hay contadores específicos que dan un panorama muy claro de como evoluciona la asignación y consumo de memoria.
Por cierto, el task manager no es de lo mejor para ver esta información, les recomiendo que usen el process explorer de SysInternals.

Más cosas, el tema del rebase de dlls también ayuda notablemente a minimizar el working set inicial de la aplicación, el porque? en otro post si es que interesa.

Por último, Jose si tu aplicación incrementa el consumo de memoria indefinidamente revisá que no tengas un memory leak por algún lado. No es normal, el compilador de clarion, si bien es mejorable, está bastante sólido como para achacarle este tema.

Por cierto, #develop está escrito en C#
gracias Leo, muy clara tu explicación.

mi app "chupa" mucho ram porque usa el sdk de griaulle de huellas digitales, a diferencia de isam/sql en las huellas no hay llaves son aproximaciones por lo que tiene que barrer "inteligentemente" la tabla de templates para el emjor match.

-no tengo fuga de memoria
-sí uso el process explorer, private/working bytes
-la duda era con respecto al foro de griaulle en donde vs/delphi si liberan la memoria

eso de la fragmentación de la memoria y de la tarea "pesada" del garbage collector esta por verse en las máquinas actuales, ram es ram, no tiene pertes móviles y no debe tardarse nada, no tiene overhead y es más higiénico.

gracias


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 13 invitados