Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cómo librarme de un Out Of Memory ??? (https://www.clubdelphi.com/foros/showthread.php?t=32788)

robinsongm 16-06-2006 08:19:19

Cómo librarme de un Out Of Memory ???
 
Hola.

Estoy realizando una aplicación de migración entre bases de datos (BD) de sql server con estructuras distintas...
El caso es que de una tabla de la BD origen debo copiar en 3 tablas de la nueva BD, además de realizar unas 5 consultas en distintas tablas de la nueva BD también. Esto para cada registro de la BD origen.

Otra parte del caso es que son miles de registros, bien por cada uno aumenta unos cuantos kb de memoria (he probado con el administrador de tareas). No obstante esto es para una única tabla, es decir, luego que termine de esta debe continuar con otras...

He tomado estas medidas para ahorrar un poco:

- Libero todos los objetos que he creado para insertar un único registro
que en general son muy pocos. (.Free)

- Cada 50 registros libero memoria con esta linea:
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
Lo bueno de esta línea es que puede reducir hasta la mitad el consumo actual, pero enseguida aumenta nuevamente al consumo antes de este proceso.

- Los campos a copiar (migrar) los llamo por índice y no por el nombre.
Query.Fields[x].AsString (en ocaciones AsInteger,As....);

Aún con todo eso he probado para insertar 2000 registros (con un TOP en la consulta en la BD origen) y el consumo alcanza unos 100 KB. Es lo más que he logrado pues antes era mayor para la misma cantidad de registros. Lo siguiente es que la tabla (de la BD Origen) siguiente a migrar tambíen tiene un monton de registros y aunque el aumento es menor siempre alcanza el "esperado" mensaje exception... Out Of Memory....

Si algo no queda claro, por favor, me lo dicen para aclararlo.

¿Sabe alguien como puedo optimizar esto?

Yosuun 16-06-2006 09:59:29

Pues no se si estoy en lo cierto o no pero me da la sensacion que el mesaje que te da el Out of memory lo da cuando se referencia a un objeto que no existe , es decir que seguramente abras destruido, y al referenciarlo de nuevo te da ese mensaje.

Un Saludo.

robinsongm 16-06-2006 19:52:37

MMM .... no habia pensado en eso... a lo mejor podría ser lo que dices, pero ¿porqué da el error luego de miles de iteraciones (del bucle) y no desde la primera o segunda ???

aun así: Gracias!


La franja horaria es GMT +2. Ahora son las 07:13:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi