Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Excesivo consumo de memoria (https://www.clubdelphi.com/foros/showthread.php?t=22199)

1111111 08-06-2005 23:12:56

Excesivo consumo de memoria
 
Hola a todos.

Situación: Desarrollé una aplicación en Delphi 7, usé Interbase 6.0 y los componentes IBX.

Problema 1: La aplicación a medida que va haciendo querys, va consumiendo mas memoria y no la libera en ningun momento... Estoy un 99% seguro que en todos los casos se hace su respectivo Commit (no CommitRetaining), dejo el 1% de duda por si alguien me dice que el no hacer un Commit puede generar este problema.

Problema 2: Cuando comienzan a utilizar la aplicación la velocidad de respuesta de los querys es normal, pero con el uso los usuarios notan que los tiempos de respuesta son larguisimos hasta llegar a hacer imposible de usar la aplicación..


Lei otro thread con un problema similar, pero en mi caso el servidor tiene un (1) solo procesador, alguien tiene alguna idea de cual puede ser el problema ??

Gracias de antemano.

ferysil2003 09-06-2005 10:56:46

No lo se, pero un detalle, si abres muchos formularios, ¿liberas memoria al cerrarlo?, es decir, si el formulario lo muestras con show, es decir en forma no modal, al cerrarlo, en el evento formclose le pones: Action:=caFree; y si lo presentas en forma modal ¿lo cierras con free?

1111111 09-06-2005 18:10:58

Cita:

Empezado por ferysil2003
No lo se, pero un detalle, si abres muchos formularios, ¿liberas memoria al cerrarlo?, es decir, si el formulario lo muestras con show, es decir en forma no modal, al cerrarlo, en el evento formclose le pones: Action:=caFree; y si lo presentas en forma modal ¿lo cierras con free?

Si, si, los formularios los libero todos.

El tema pasa exclusivamente por los querys, es mas, los querys que uso los uso en el main form, sin abrir ningun otro form.

Gracias de todas formas.
Alguna otra solución ??

1111111 10-06-2005 16:16:02

Alguien que me de una mano ??

Es posible que se tome memoria y no se libere por algun bug de Interbase o los IBX ?

AGAG4 10-06-2005 17:12:03

ok
 
Que Versión de IBX usas? te recomiendo usar FireBird la última versión 1.52....

Saludos....

Casimiro Notevi 10-06-2005 17:20:36

Deberías dar más detalle para ponernos en situación.
Qué componentes query usas?, qué hacen exactamente esos querys?, qué propiedades y valores tienen?, has modificado alguna de las que traen por defecto?... en fin, da los máximos detalles posibles.

1111111 10-06-2005 17:48:07

Uso la version 7.04 de los IBX.
Los componentes que uso para hacer querys son los TIBSQL y los TIBQuery y para los Store Procedure los TIBStoreProcedure.

El TIBTransaction esta en Read Committed.
El resto de los componentes tiene sus propiedades sin modificar.


Los querys hacen varias cosas.

Puntualmente me centré en un Query para probar...lo único que hace este Query es traer X cantidad de registros (5000 mas o menos).

Ejecuto este Query, me trae los resultado, lo ejecuto, me trae los resultados...etc..etc...

Luego de cada ejecución me incrementa la memoria que ocupa el programa en 12K....y nunca la libera.


Alguna idea ?

Casimiro Notevi 10-06-2005 23:39:57

Por ir descartando cosas, prueba a liberar memoria inactiva

Otra cosa que puedes hacer es eliminar los componentes y crearlos de nuevo, por si acaso.

También puedes crear un proyecto nuevo y poner únicamente lo mínimo necesario para hacer esa prueba y ver qué resultados te dá.

Aunque los componentes IBX tienen un pequeño problema por la forma en que tiene implementado la gestión de memoria, en este caso creo que no te afecta porque 5000 registros son muy pocos.

Imagino que habrás comprobado que realmente el "culpable" es el query, no vaya a ser por ejemplo que sea el form que no se libere o algo así

jachguate 11-06-2005 00:24:15

Cita:

Empezado por 1111111
Uso la version 7.04 de los IBX.

El tema puede venir por la versión que usas. IBX ha corregido multiples bugs. Si no estoy mal la versión actual es 7.08 o por lo menos 7.07. Te recomiendo actualizarlos.

Podes descargarlos del codecentral, específicamente en la página de Jeff Overcash, autor de la biblioteca.

Hasta luego.

;)

Will 16-06-2005 03:46:25

Espero te sirva!!
 
Hola amigo delphilero!!
Hace poco se me presento por lo que entiendo, el mismo problema. Lo solucioné colocando la propiedad Unidirectional="True". Claro que el propósito mío solo era ejecutar actualizaciones y consultas a la base de datos, sin tener que navegar por los datos que regresaba la consulta.
Espero que te sirva!!

Por otro quisiera saber si conoces a alguien que conozca la forma de saber que registro de una tabla se encuentra bloqueada por alguna transacción.
Gracias !!

cahp 16-06-2005 11:45:04

Hola,

comentas que solo lun procesador, pero si se ejecuta sobre win xp, este emula dos procesadores, y creo que lo tienes que inhabilitar de placa.

Nosotros hemos tenido problemas simililares, y se han solucionado poniendo firebird 1.5

saludos

1111111 18-06-2005 23:08:20

Cita:

Empezado por Casimiro Notevi
Por ir descartando cosas, prueba a liberar memoria inactiva

Otra cosa que puedes hacer es eliminar los componentes y crearlos de nuevo, por si acaso.

También puedes crear un proyecto nuevo y poner únicamente lo mínimo necesario para hacer esa prueba y ver qué resultados te dá.

Aunque los componentes IBX tienen un pequeño problema por la forma en que tiene implementado la gestión de memoria, en este caso creo que no te afecta porque 5000 registros son muy pocos.

Imagino que habrás comprobado que realmente el "culpable" es el query, no vaya a ser por ejemplo que sea el form que no se libere o algo así

Muchas gracias por el link a ese truco, al menos con esto puedo mantener la cantidad de memoria utilizada a raya.


La franja horaria es GMT +2. Ahora son las 12:06:11.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi