Ver Mensaje Individual
  #1  
Antiguo 16-06-2006
robinsongm robinsongm is offline
Miembro
 
Registrado: sep 2004
Ubicación: Madrid, España
Posts: 25
Reputación: 0
robinsongm Va por buen camino
Question 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?
__________________
Ni la utilidad del mentir es sólida, ni el mar de la verdad perjudica mucho tiempo.
Responder Con Cita