2010-07-26 17 views
9

He estado incursionando en Delphi una y otra vez durante años y siempre me he preguntado por qué minimizar y restaurar una aplicación hace que use menos memoria?Delphi - Minimize & Restore libera la memoria?

Como ejemplo estoy usando Delphi 7 y creo un nuevo proyecto sin nada en él, pero en blanco todos los proyectos comienzan y luego presiono F9 para ejecutar la aplicación y luego miro el uso de la memoria de la aplicación y está alrededor de los 3.5mb. Luego minimizo la aplicación y el uso de la memoria baja a alrededor de 760kb y luego finalmente restauro la aplicación y el uso de memoria vuelve a los 1.5mb, que es aproximadamente 1/2 de lo que era cuando primero se cargó y esto siempre me ha confundido en cuanto a lo que está haciendo que esto suceda y aún más al punto hay que comenzar la aplicación con alguna directiva que haga que use los 1.5mb de memoria en lugar de los 3.5mb que normalmente usa.

Cheers, de Dave

+0

"Memoria" es una definición muy vaga. Lo que ves es un conjunto de trabajo decreciente. También puede encontrar este artículo útil: http://blog.eurekalog.com/catching-memory-leaks/ – Alex

+0

Es vago después de que trabaje para Microsoft el tiempo suficiente. –

Respuesta

5

probablemente es algo con la gestión de memoria de Windows. intentar hacer lo mismo con la calculadora de Windows y el comportamiento es el mismo :))

aquí una respuesta: http://support.microsoft.com/?kbid=293215 y algunas personas tienen la misma pregunta: http://digital.ni.com/public.nsf/allkb/9EA3D4258E037B8A8625763300434D4D

mejores deseos,

+0

Gracias por la respuesta, era más curioso que cualquier otra cosa, al menos ahora sé que no es solo que mis aplicaciones no son las únicas que hacen esto. Gracias otra vez, Dave – dave

+0

+1 para KB artículo – Alex

+0

Este es un buen ejemplo de Windows donde suelo decir, cuando descubro lo que hicieron: "[inserte una declaración imprecatoria ruidosa aquí] No puedo creer que lo hayan hecho ! " Windows le miente a usted, porque no podían determinar cuál de las cosas que podían decirle es lo más cercano a lo que desea saber, como la cantidad de memoria que usa esta aplicación. Así que eligieron una de las cosas que sí saben cómo calcular, y la etiquetaron con una etiqueta breve fácil de usar pero inexacta; "este es el que está buscando", cuando claramente, no lo es. –

4

Here you can find muy explicación clara de Ian Martins. Cuando la aplicación minimiza el sistema llame al SetProcessWorkingSetSize procedimiento para la memoria inactiva del proceso.

Puede hacer lo mismo agregando este código a su aplicación. En un botón OnClick usted puede hacer esto:

procedure LiberarMemoria; 
begin 
    if Win32Platform = VER_PLATFORM_WIN32_NT then 
    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF); 
end; 

El efecto es similar a minimizar la aplicación. Si su aplicación hace alguna tarea que eventualmente use un gran bloque de memoria, puede forzarla a liberarse después de usarla, usando este pequeño código.

Saludos

+0

Me habría ayudado si la explicación muy clara de Ian Marteens hubiera sido en inglés ... –

+2

Cita del enlace especificado: "Lo más fácil se ejecuta desde un temporizador, cada minuto, por ejemplo". Sí claro. Manténgase alejado de este artículo por su propio bien. – Alex

+1

@ Alexander, por favor, verifique y lea mi comentario detenidamente y vea que en cualquier lugar he recomendado que la liberación de memoria se realice cada minuto. Dije: "... Si su aplicación realiza alguna tarea que EVENTUALMENTE use un gran bloque de memoria, puede forzarla a liberar DESPUÉS DE USARLO" (1) Eventualmente (2) DESPUÉS DE USARLO, no cada minuto . Lo he recomendado, para la explicación y para el código. Por favor, lea cuidadosamente las respuestas. P.D: excusa por errores con el inglés. –

Cuestiones relacionadas