Ver Mensaje Individual
  #2 (permalink)  
Antiguo 06/04/2008, 09:24
Avatar de dwaks
dwaks
 
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 9 meses
Puntos: 15
Re: Se queda sin memoria?

Saludos DjNelson,

No dare mucha vuelta al asunto pero basandome en tu conclusión que podría ser sobre carga de memoria te hablaré de algunos puntos,

Este proceso es repetitivo, osea, tienes una lista de 100 cuando procesas el numero uno y termina inicias el numero 2 y asi sucesivamente para los restantes, suele suceder que antes de cualquier proceso nuevo algunos objetos necesitan ser liberados para ser reusados para estos casos existe segun objeto muchas formas:
1- object.Dispose()
2- object.Close()

Otras formas que son usar "using" que destruye automaticamente el objeto cuando ya no es usado:
1-
using(DataSet ds = (DataSet)getList()){
// aqui usas el data set que creaste y al salir del usign se destruye, es solo ejemplo
}

Puedes verificar esos puntos para no entrar en detalle de tu codigo ni de tu logica que tomaria tiempo, ahora bien otro consejo que puedo darte es que no se puede abusar de la factibilidad de retener informacion de un programa en memoria sin tener control de cada minimo espacio de memoria usado, para esto solo puedes asegurar los procesos de la siguiente forma:
1- Proceso 1 - Limpiar memoria - Proceso 2 - Limpiar memoria etc etc etc ...

En mi posicion como no sabre cuantos albaranes abran en un mes lo que yo veria factible para mi es, llamar a la base de datos los ID de cada albaran y ponerlos en un ArrayList luego darle sort "ArrayList.Sort" despues voy procesando uno por uno haciendo llamados a la Base de Datos por cada ID de albaran (de uno en uno) y le saco la factura, cierro todos los objetos abiertos y sigo con el siguiente albaran, de esta forma no cargo nada en memoria de forma simultanio sino secuencial.

Se veria un proceso asi:
1- obtener id de albaranes y ponerlos en un arraylist
2- darle sort al array list creado
3- llamar id en la posicion 0 y traer los datos del albaran que coincidan con este id
4- procesar la factura y mandar a imprimir
5- cerrar las referencias de crystal report, data base y demas
6- remover del array list el id de albaran ya usado y seguir el proceso nuevamente

Aqui controlaria mas lo que hago paso a paso y evitaria problemas incontrolables que se puedan presentar.

No te pido que lo hagas asi pero de lo que escribo derrepente sacas una idea de algo que te pueda ayudar.

Saludos,
Marco