Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Lentitud conexión SQL (https://www.clubdelphi.com/foros/showthread.php?t=23993)

amedina 04-08-2005 16:08:49

Lentitud conexión SQL
 
Agradecería una recomendación con la siguiente situación:

Motor dB: SQL Server.
Tool: Delphi 6
Tamaño Exe: 21 Mb
Servidor SQL: 1 Gb RAM, Procesador Xeon
PC Cliente: 512 Mb RAM, Procesador Pentium IV de 3.0 Gz

El aplicativo tiene un DataModule con 115 DataSets (no lo puedo disminuir). Este DataModule es utilizado ("Use") por todos los formularios del aplicativo sin utilizar DataSets internos en los mismos.
El aplicativo a partir de su arranque (visualización formulario principal en pantalla) tiene un rendimiento normal. La demora se presenta para el arranque del mismo (visualización formulario principal en pantalla), casi hasta 3 minutos.

Agradezco enormemente cualquier recomendación que me permita reducir esta demora.

Neftali [Germán.Estévez] 04-08-2005 16:18:35

¿No estrás abriendo todos los DataSet's al empezar no?
Si es así malo por dos cosas:
(1) La primera es clara; El tiempo;
(2) La segunda es que estás abriendo Tablas sin necesidad, por lo tanto tienes muchos cursores abiertos.

La solución más fácil es que abras cada DataSet y lo cierres cuando utilices ese formulario. La entrada será mucho más rápida y en cada momento sólo tendrás abiertos los DataSets correspondientes a los formularios abiertos.

amedina 04-08-2005 17:19:51

Gracias Neftalí por tu tiempo.

Los DataSet´s están incluídos en un solo DataModule, y en la sentencia USES del formulario coloco el DataModule mencionado. De tal manera no entiendo claramente si los estoy abriendo al tiempo, ya que no le estoy dando el comando OPEN. El formulario principal (Main Form) con el que abre el aplicativo tiene el USES con el formulario mencionado, y demora 3 minutos en aparecer en pantalla. Qué estaré haciendo mal, o qué instrucción me hace falta incluir ?
De nuevo muchas gracias.

amedina 04-08-2005 17:22:18

... y en el momento que abro el MAIN, aún no he abierto el formulario que llama el DataModule.

Neftali [Germán.Estévez] 04-08-2005 17:34:41

¿Pero en diseño los tienes activados?

Es sencillo, si al acceder a los formularios no haces el Open es que ya están abiertos.

amedina 04-08-2005 17:43:55

Bastaría entonces con darles el OPEN en los formularios que los utilizan ?
Creo que mi dificultad entonces se solucionaría con la respuesta a esta pregunta: Cómo hago para empezar con los DataSet´s cerrados ?

Gracias de nuevo.

amedina 04-08-2005 17:45:10

... con el ACTIVE ?

Nelson Polanco 04-08-2005 20:47:42

Saludos.
Al respecto tambien les recuerdo que puede ser porque se estan creando muchos formularios al iniciar la aplicacion, de ser esto entonces avisanos.
Si el caso es porque los Dataset estan abiertos entonces te recomiendo que los cierres y los abres en el evento OnActivate de cada formulario segun se necesite abrir y al momento de cerrar el formulario verificas si es necesario cerrar algunos.

Suerte.

Lepe 04-08-2005 21:40:41

Con 115 Datasets, mas vale que te organices un poco. Hazte un esquema de qué datasets usas en cada ventana, y como es normal, habrá datasets que lo uses en varias ventanas, si al cerrar una ventana cierras un Dataset comun a otra ventana, ésta última se te quejará!!!

En este caso, tendrás que crearte una lista con todos los datasets que tengas, y un contador para cada Dataset, de tal forma que :
- Al abrir una ventana, aumentes el contador:
- Si el contador valía 0 y se ha incrementado, abres el Dataset.
- Si el contador es >0, incrementas el contador y no haces nada más.
- Al cerrar una ventana, decrementas el contador:
- Si el contador vale cero despues de decrementar, cierras el dataset.
- Si el contador es mayor que cero, solo decrementas el contador.

Con tantos Datasets es demasiado laborioso enumerarlos, así que tendrás que recorrer todos los componentes TTable, Tquery, etc, y metiendo una referencia en una tabla (por ejemplo) para despues poder abrirlos y cerrarlos comodamente.

Por cierto es mejor que abras los Datasets en el evento OnCreate o en el OnShow del form, ya que el Activate puede ser demasiado repetitivo.

En respuesta a tu pregunta, Si, basta con usar Dataset.Open y Dataset.Close, pero despues de leer este mensaje, habrás comprendido que puede ser algo "más complejo"

Un saludo


La franja horaria es GMT +2. Ahora son las 15:04:47.

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