Foros del Web » Programación para mayores de 30 ;) » .NET »

Se queda sin memoria?

Estas en el tema de Se queda sin memoria? en el foro de .NET en Foros del Web. Estoy haciendo una aplicación en .NET 2005, concretamente una ventana desde la que generar automáticamente facturas a partir de los albaranes. Se establecen unos filtros, ...
  #1 (permalink)  
Antiguo 02/04/2008, 03:35
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Se queda sin memoria?

Estoy haciendo una aplicación en .NET 2005, concretamente una ventana desde la que generar automáticamente facturas a partir de los albaranes.

Se establecen unos filtros, por ejemplo, facturar albaranes de un mes en concreto.

Luego se genera una consulta SQL y se obtienen los albaranes que se van a facturar, los meto en una colección y voy generando las facturas.

A medida que se van generando las facturas se van imprimiendo, para ello uso cristal reports, pero en vez de mostrar el informe en pantalla (para que no se interrumpa el proceso) lo que hago es imprimirlo directamente a una impresora predeterminada. Al finalizar saco un mensaje diciendo 'se generaron x facturas'.

Hasta ahi todo bien.

el problema es que al llegar más o menos a la factura generada numero 74-75 el programa da un error: 'no se puede cargar el informe'.

Si cierro el programa y vuelvo a repetir el proceso el programa continúa desde la última factura generada, es decir, no hay problema ninguno en la programación ni en los datos.

Creo que podría ser algo referente al consumo de memoria del programa, que al llegar a un limite no puede continuar o algo así.

Alguien sabe que puede estar pasando?

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
  #2 (permalink)  
Antiguo 06/04/2008, 09:24
Avatar de dwaks  
Fecha de Ingreso: agosto-2002
Ubicación: Panamá
Mensajes: 962
Antigüedad: 21 años, 8 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
  #3 (permalink)  
Antiguo 09/04/2008, 02:44
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Re: Se queda sin memoria?

Gracias Marco, el proceso es tal como lo describes, probaré a liberar memoria tras cada factura a ver que pasa.

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:33.