Retroceder   Foros del Web > Programación para sitios web > .NET > win forms

Respuesta
 
Herramientas Desplegado
Antiguo 02-abr-2008, 03:35   #1 (permalink)
DjNelson está en el buen camino
 
Fecha de Ingreso: julio-2003
Mensajes: 664
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)
DjNelson está desconectado   Responder Citando
Antiguo 06-abr-2008, 09:24   #2 (permalink)
dwaks está en el buen camino
 
Avatar de dwaks
 
Fecha de Ingreso: noviembre-2002
Ubicación: Panamá
Mensajes: 724
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
__________________
Miembro fundador de el Grupo PHP de Panamá

Saludos,
dwaks
dwaks está desconectado   Responder Citando
Antiguo 09-abr-2008, 02:44   #3 (permalink)
DjNelson está en el buen camino
 
Fecha de Ingreso: julio-2003
Mensajes: 664
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)
DjNelson está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 02:00.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93