FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Rutina muy lenta...
Por alguna razon la rutina que os detallo va superlenta....., MDO con Firebird , Delphi 7 en XP.
estoy utilizando TMDOTable y tarda mas de 30 minutos en actualizar 900 registro con la siguiente rutina. Agradezco vuestra paciencia en darme alguna pista de como optimizar esta rutina......
ESPERO SE ENTIENDA!!!! Última edición por dec fecha: 03-07-2007 a las 17:08:44. |
#2
|
||||
|
||||
Yo, a priori lo que haría sería poner unas mnarcas de tiempo para detectar qué es lo que está tardando más.
No comentas cuantos artículos tienen las otras tablas. Revisa que tienes definidos los índices para las búsquedas y que se están utilizando. El tema del First/Last seguidos no es recomendable porque obligas a cargar todos los registros (aunque con 900 no debería ser problema). Si puedes evitar los loPartialKey en las búsquedas mejor. Asegúrate del tiempo que están tardando los Locate. Como alternativa al LOCATE lanza una SQL con TOP 1. Si tienes controles visuales "linkados" inhabilitalos para ver si mejora. NOTA: Sin tener más datos apuesto por que son los LOCATE.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
||||
|
||||
Cita:
Si son 900, tardará la de dios en encontrar lo que buscas. Saludos.
__________________
"El aprendizaje potencia la intuición" Yo mismo, en un momento de inspiración. v2.0 |
#4
|
||||
|
||||
Cita:
// Saludos |
#5
|
||||
|
||||
Cita:
Por una parte, en una apliación, tenía que buscar entre unos miles de registros, unas referencias sin orden alguno y aunque disponía de indice, usaba la función locate e iba mas lento aquello que el caballo del malo, por lo que deseché esa opción y utilicé otra diferente (ahora no recuerdo cual era pero si que me quedó grabado a fuego LOCATE-> KK). Lo del arranque lento tenía que ver con otro tema diferente :P
__________________
"El aprendizaje potencia la intuición" Yo mismo, en un momento de inspiración. v2.0 |
#6
|
||||
|
||||
Mejor haz un procedimiento almacenado que haga esas operaciones y solo mandalo a llamar desde tu programa.
Seguro que si lo haces asi si se tarda 50 milisegundos será mucho tiempo. Ahora si no quieres hacerme caso con lo del procedimiento almacenado prueba poner esto antes de ejecutar tu código:
y al final le pones:
__________________
"Hey, nena, debe ser genial ser tú y verme a mí mismo..." |
#7
|
||||
|
||||
Aparte de la lentitud de locate y esas cosas en tablas, tan sólo quería indicar que la ProgressBar no se usa así, sino que debes llamar a 'StepIt' que avanza la progressbar, no tienes que llevar el control del paso a paso.
|
#8
|
||||
|
||||
Una cosa más en relación a lo que ha comentado Casimiro y el uso de los progressbar; Dado que calculas el Max del ProgressBar a partir del número de registros de la tabla puedes obtener un max de 900, 1000 o 5000.
Imagina un ProgressBar que tiene como mínimo 0 y como máximo 5000... ¿Tiene sentido? ¿Son apreciables para el usuarios los 5000 cambios en el Progress? ¿Es necesario repintar (costoso) el progress 5000 veces? Yo creo que no. En estos casos, lo que hago es no repintar el Progress más de 25 o 50 veces. Puedes utilizar un MOD para que en lugar de pintar 900 pasos pinte 25 (en este caso un Step cada 36 registros); Es más eficiente y el efecto para el usuario la mayoría de veces es inapreciable. NOTA: Cuanto mayor es el número de pasos más se aplica lo comentado. NOTA2: Hay que tener en cuenta que el proceso no vaya a tardar 5 minutos y sólo mostremos 25 pasos... Nunca perder de vista el tiempo que puede tardar el proceso, para que la visualización sea correcta.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#9
|
||||
|
||||
Esto me llama la atención. Suena perfectamente razonable lo que dices del repintado, pero, a decir verdad, quizá un poco por flojera, yo siempre pongo el ProgressBar.Max al máximo (valga la redundancia) y el Step en 1 y no noto que haya ningún problema. Seguro que el usuario no aprecia 5000 cambios, pero, ¿realmente hay cinco mil cambios visuales? Porque yo tengo la impresión que el control dibuja una nueva porción sólo cuando realmente es necesario, o estaríamos viendo un parpadeo, y no lo aprecio.
// Saludos |
#10
|
|||
|
|||
Agradezco vuestra atención. El problema estaba básicamente en el componente TMDOTable q se rayó (me costo un monton detectarlo), pero solucione el problema simplemente eliminando e incluyendo de nuevo el componente TMDOTable . Claro q tambien optimice las busquedas utilizando SQL's como me habeis recomendado en vez de los locate...
DE NUEVO MUCHAS GRACIAS A TODOS POR VUESTRA ATENCION!!!! |
#11
|
||||
|
||||
Pero, exactamente, ¿cuál fue el problema? Porque daría entonces la impresión de que es mejor no usar esos componentes que pueden de pronto rayarse.
// Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ayuda con consulta lenta, lenta, lenta | Gregory Mazon | Firebird e Interbase | 22 | 27-06-2007 09:56:38 |
Problemas con rutina seek | JF Sebastian | OOP | 0 | 03-02-2007 13:44:20 |
Rutina de digito verificador | tulio | Varios | 4 | 09-08-2006 17:43:18 |
No sale rutina SQl ............ | Coco_jac | SQL | 2 | 30-11-2005 16:52:44 |
Impresion lenta, muy lenta... | Perio | Impresión | 2 | 20-05-2005 13:10:00 |
|