FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
"Out Of Memory" con clientdataset > 100.000 registros
Estimados y admirados amigos:
Tengo un procedimiento que en teoría recorre una tabla que hoy x hoy tiene mas de 100 mil registros (Mal diseño por supuesto). Antes de ese numero no daba ningun lio por lo que no consideraba ninguna alternativa. sucede que al intentar grabar un nuevo registro luego de unos 3 segundos sale el error "Out Of Memory". El copdigo con el que no he tenido problema sino solo hasta ahora que sobre paso un importante numero de registros es el siguiente: Luego de muchas horas de busquedas y lecturas y de leer incluso que esto no se ha solucionado o que es mejor cambiar el componente; tambien he visto que se puede solucionar con simplemente cerrar y abrir donde corresponda para liberar la memoria. Lo he intentado sin un positivo. agradezco a Uds alguna sugerencia en la medida de lo posible. Mil gracias. |
#2
|
||||
|
||||
Creeme. desde la perspectiva de la BD, es insignificante. No me parece que sea para considerarlo un error de diseño. Yo creo que el problema es levantar esa cantidad en un ClientDataSet. Creo que lo mejor que podes optar es por operar en batch, es decir, toma de a "montones" y no los 100 mil. Por ejemplo, podes tomar 10 mil registros, procesar todo, descartarlos, tomarlos 10 mil siguientes, y asi
|
#3
|
||||
|
||||
Para darnos una idea más clara, ¿en qué línea ocurre el error? Probablemente estás disparando un manejador de eventos BeforePost o similar, que realiza alguna tarea que eleva esa excepción. Posible recursión, incluso.
Saludos. Última edición por Al González fecha: 25-01-2017 a las 07:02:27. |
#4
|
|||
|
|||
Hola Muchachos gracias por su interes pra la colaboracion que pido...
Al mira que cuando ejecuto con depurador Delphi me envia a esa tlinea de codigo (la de color rojo). curiosamente este es otro procedimiento relacinado que no habia tenido en cuenta. Sobre lo que comenta [AgustinOrtu]; pues tambien me suena mucho. voy a ir estudiando esta solucion tambien. Mil gracias a ambos. Que se busca; Este codigo Filtra de una tabla llama procedimientos una serie de productos y servicios que vende un laboratorio de patologia; y nos muestra (Junto con el diseño) unas opciones entre otras cosas de repetir 2 o mas veces la misma venta del procedimiento. El codigo anterior graba esa venta que puede ser de un procedimiento unico o de uno repetido muchas veces. con el error de "out Of Memory" solo me grba 1 las repeticiones no las hace y salta el error. Gracias
|
#5
|
|||
|
|||
Si me permites quisiera hacer los siguientes comentarios
{1}: Estas liberando el objeto CDSProcedimientos, esto es eliminar todos los campos persistentes que podría tener definido. {2}: Estas creando un nuevo objeto CDSProcedimientos, sin ningún campo persistente {3}: Estas creando un nuevo dataset vacío, para agregar registros a el, pero no haz definido los campos que contiene. {4}: Debería ir el código que define los campos del dataset antes de llamar al Createdataset
Te adjunto un ejemplo de creación de un TClientDatset, obtenido desde TCustomClientDataSet.CreateDataSet
Saludos cordiales |
#6
|
|||
|
|||
Mil gracias cloayza por tu tiempo y colaboracion.
Ahora mismo hago esa revision y cambio las cosas. sinembargo me queda una inquietud. Esos comentarios acertados que me haces si tienen como consecuencia un "Out Of Memory"; por que antes de los 100 mil registros aun estando igual no daba ese error. Gracias Amigo cloayza |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Me aparece el error "Insufficient memory for this operation." | ilichhernandez | Varios | 5 | 23-07-2010 18:48:16 |
¿como Puedo Cancelar La Inserción De Los Últimos Registros "insertados" | OscarBravo | Tablas planas | 1 | 23-07-2007 19:26:35 |
Necesito llamar a métodos de clases "hija" desde su clase "padre" | Flecha | OOP | 17 | 20-04-2007 00:03:53 |
Evitar el "Refresh" del ClientDataSet | leanfreue | SQL | 2 | 14-04-2007 23:41:38 |
"Insuficcient memory for this operation" | elcigarra | Varios | 1 | 08-12-2005 15:19:51 |
|