FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Hola,
finalmente segui el consejo de duilioisola y sige dando error "out of memory". Pero esta vez llega hasta el fichero 8774 y crea un fichero de 330 MB. Decidi separar los procesos en botones separados, uno para la lectura de los ficheros iniciales y puesta en tabla. Mientras, el segundo boton salvaba toda la tabla en un fichero con las instrucciones de duilioisola. Esta vez funciono OK. Que puede estar pasando que da error cuando lo hago combinado como el ejemplo de duilioisola y sin embargo cuando lo hago separado funciona sin problema? Gracias, A |
#2
|
||||
|
||||
Veo que en medio del cálculo y escritura al fichero vas rellenando un TStringGrid (form1.stringgrid7).
recorres 8784 ficheros 1 Agregas 4 filas con con las 4 primeras columnas rellenadas con datos que lees. 2 Agregas tantas columnas como filas tenga el fichero 3 Escribes la tercera línea insertada al fichero de texto. Esto genera un StringGrid enorme (8784 lineas x Tantas columnas como el fichero más grande leido(3600)). 8.784 x 3.600 = 31.622.400 celdas Parece que todos contienen número convertidos a texto (aparentemente de 4 dígitos de máximo.) Sin contar datos para la estructura (punteros, RTTI, y otros datos de control de StringGrid) tienes en memoria 126.489.600 bytes Si no me he equivocado en las cuentas tienes 126 MB de memoria ocupada por el StringGrid. Dado que no creo que estés mostrando el progreso en pantalla mediante el StringGrid, supongo que lo mas sensato es no utilizarlo y hacer algo mucho mas simple He comentado el codigo a reemplazar, pero he dejado la parte donde rellenas las primeras 4 columnas del StringGrid con datos del fichero importado. 8.784 x 4 x 4bytes = 140.544 bytes (140 KB)
|
#3
|
|||
|
|||
Cita:
Bueno tu proceso maneja basantes datos y tanto el stringgrid y stringlist almacenan los datos en memoria ram y tu al mencionar que generas archivos de salida de mas de 300 mb entonces es evidente que te salga ese mensaje de error. Para hacer todo junto podrias probar lo que te comente al inicio, que es consolidar tus datos en un clientdataset desconectado y a la par escribir en los archivos de texto. En ambos procesos estas escribiendo directamente al disco, técnicamente no tendria porque colgarse (porque no vas a usar intensivamente la ram), pero habria q evaluar la velocidad del proceso si conviene hacerlo asi, como optimizar al clientdataset anulando el logchange a falso y usar las columnas directamente (no usar fieldbyname) ya que la ram es mas rapida. A lo mejor haciendo separado es mas rapido (consolidar en stringgrid y luego grabar a txt), eso lo tendrías que probar. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Out of Memory | javicho_villa | Varios | 12 | 04-10-2019 23:54:49 |
Out Of Memory | Cesargt | Varios | 10 | 21-10-2015 20:53:51 |
Out of memory | Firewind | Lazarus, FreePascal, Kylix, etc. | 3 | 20-07-2010 12:33:32 |
Out of Memory | luxus | OOP | 5 | 30-09-2008 23:11:54 |
Dudas usando la clase TStringList | blamsa | Varios | 6 | 27-05-2005 16:50:48 |
|