Bitcoin

BitMiner - free and simple next generation Bitcoin mining software

martes, mayo 08, 2007

Liberación de memoria en Delphi

Hace como 6 meses publique en mi blog el como hacerlo, y aquí esta nuevamente:

http://www.seshop.com/image/product/200411/BOL661750_L.jpg
Normalmente para el manejo de memoria utilizamos el siguientye metodo.

1.- Vamos al menú Project / Options

2.- En la lista de Auto-create forms seleccionamos solamente las formas que se deben crear al iniciar el proyecto. Dejando en la lista Aviable forms las formas que crearemos solo al mandarlas llamar.

3.- Para llamar una forma (crearla) hacemos lo siguiente:

Forma:=TForm.Create(nil); //Creamos la forma
Forma.Show; //Mostramos la forma

4.- Para eliminar la forma de memoria hacemos lo siguiente:

Forma.Free;

5.- El FREE elimina la forma de memoria y todos los componentes, pero no elimina los componentes creados a mano, es decir, aquellos que generamos con TTipoObjeto.Create()

Nuestro problema surgió al ver como la memoria RAM aumentaba y nunca disminuía (lo hacia al menos un poco, pero no lo suficiente). Creacia de 13 Mb ocupados en memoria hasta 200 Mb en el transcurso del uso del sistema hasta trabar la computadora.

Par solucionar el problema debíamos buscar una solucion la cual no nos quitara tiempo al cambiar todo el código y el modo de crear los objetos. Así que juntos encontramos la siguiente solución, que a muchos les será de utilidad.

Eliminación de memoria virtual en Delphi que no se encuentra en uso.

Para hacer lo siguiente basta con ejecutar el siguiente procedimiento:

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

Y la mandamos llamar de la siguiente manera:

try
Forma:=TForm.Create(nil);
Forma.Show;
finally
FreeRAMDelphi;
end;

Fuente: lawebdejm.com

Extracto de bibliografia utilizada:
Región 1

Familia 95: de $00000000 a $003FFFFF
Familia NT: de $00000000 a $00000FFF

Región privada para permitir la compatibilidad con aplicaciones de MS-DOS. En MS-DOS no era posible escribir dentro de los primeros 4Kb de memoria, así que cuando diseñaron Windows tuvieron que continuar con la misma limitación. Un intento de lectura/escritura sobre las primeros 4 Kb (desde $0000 a $FFFF) provocará una violación de acceso. Esa región también es privada para detectar la utilización de punteros nulos, ya que intentarían escribir en la dirección 0.


Región 2

Familia 95: de $00400000 a $7FFFFFFF
Familia NT: de $00001000 a $7FFEFFFF

En esta región es donde se almacenan los datos privados de cada proceso. Como podemos ver, la cantidad de memoria que puede llegar a utilizar una aplicación no son 4 GB como dijimos en principio, sino que son aproximadamente 2 GB.
En la familia NT se almacenan tanto el código y datos de los ejecutables como las DLL del sistema y de usuario. Cualquier variable que utilicemos desde nuestros programas estará en este rango.


Región 3

Familia 95: de $80000000 a $FFFFFFFF
Familia NT: de $8000000 a $FFFFFFFF

Región privada donde se carga el kernel del sistema operativo y los controladores de dispositivos (archivos .VXD).
En Windows 95 además, esta región alberga las DLLs y los archivos proyectados en memoria. Otra diferencia entre Win95 y NT es que para el primero, la región es accesible por el proceso, y el segundo provocará una violación de acceso si se intenta leer/escribir en este rango de direcciones.
Seguímos en línea.

No hay comentarios:

Publicar un comentario

Tu comentario es importante para nosotros, gracias por darnos tu opinión.