![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Este código es super lento
Hola, os dejo el código aquí abajo:
Resulta que demora y se me congela el formulario 1 o 2 segundos: Como lo podemos optimizar?
Última edición por Casimiro Notevi fecha: 20-09-2017 a las 17:50:31. |
#2
|
||||
|
||||
Lo que se me ocurre que podes hacer y que suele mejorar la performance, es deshabilitar el refresco de los componentes visuales mientras realizas tu proceso, y decirle que haga todo de un plumazo al final:
Hace tiempo que no trabajo con componentes Data-Aware, no estoy seguro de si hay algun metodo similar en el componente DataSource |
#3
|
||||
|
||||
Me parece que 1 o 2 segundos no es mucho dependiendo de la cantidad de registros, lo que si molesta en estas situaciones es que se congele el formulario, por lo tanto te sugiero que lo hagas en una tareas separada:
¿Por otro lado porque haces la operacion sobre el dbgrid y no sobre el dataset? Saludos. |
#4
|
|||
|
|||
![]() Muchas gracias a ambos, sin embargo, parece que le erré, no es esa la función que causa que el formulario se congele entre 1 y 2 segundos.
Es cuando llamo al procedimiento relacionarProv ¿Puedo hacer lo siguiente? Código:
TTask.Run( procedure begin relacionarProv; end); |
#5
|
||||
|
||||
Y que hace relacionarProv?
__________________
El malabarista. |
#6
|
|||
|
|||
Resulta que fin = 2, porque solo estoy relacionando 2 mmmm... Última edición por Casimiro Notevi fecha: 20-09-2017 a las 19:30:40. |
#7
|
||||
|
||||
Hola.
Para detectar el motivo de la demora, también sería necesario ver el código de la función extraerIDProveedor (así como también conocer con cuantos registros estas trabajando). Saludos ![]()
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#8
|
||||
|
||||
Y también sería necesario saber qué estás haciendo y qué quieres conseguir.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#9
|
||||
|
||||
El problema es que meter en hilos en segundo plano codigo que actualiza la interfaz de usuario te va a traer problemas de sincronizacion, ya que solo el hilo principal (es decir, en donde corre la Vcl) se pueden actualizar los controles.
Para poder usar hilos debes separar completamente los datos de tu interfaz grafica, de esta manera podes procesarlos en segundo plano y luego actualizar cuando este procesamiento termina |
#10
|
||||
|
||||
De primeras decir que das pocos datos para hablar de rendimiento.
Es decir, lo lento o rápido de este código, aparte del código dependerá de qué tipo de consulta estás utilizando, números de registros, qué tipo de cursos estás utilizando,... Por otro lado, sin saber muy bien lo que quieres obtener, hay una línea que no me queda clara:
¿Si ya estás recorriendo los "seleccionados", porqué haces un Find para ver si la línea está seleccionada (segun el comentario)? Revisa la ayuda sobre GotoBookmark.
__________________
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. |
#11
|
|||
|
|||
El extraerID se los dejó por aquí:
Código:
var IDprov: String; i: Integer; begin IDprov := ''; i := 0; for i:= 1 to length(dato) do begin if(dato[i] = '-') then Break else IDprov := IDprov + dato[i]; end; result := IDprov; end; |
#12
|
||||
|
||||
Aparte de todo, yo diria que meter hilos en si mismo es un problema. Un algoritmo secuencial deberia ser rapido antes de pensar en ponerlo paralelo (ademas que es poco comun que se usen hilos correctamente).
----- Una optimizacion obvia si la idea es marcar que filas estan o no seleccionadas es reaccionar al evento de "seleccion/des-seleccion" de forma directa y actualizar el array, no al final en batch. Esto deberia SUSTANCIALMENTE reducir los tiempos.
__________________
El malabarista. |
#13
|
|||
|
|||
Tienes razón, voy a intentarlo y comento más tarde o mañana.
Gracias a todos. |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
ayuda con este codigo | kurono | Varios | 5 | 02-04-2014 00:25:11 |
Porque este código me da error (adjunto código) | David | JAVA | 1 | 12-03-2009 20:07:27 |
ayuda con este codigo | kurono | Varios | 4 | 13-06-2008 01:03:29 |
Editor BRIEF super lento D2007 | El_Raso | Varios | 0 | 02-05-2008 00:38:22 |
Que significa este codigo? | D-MO | PHP | 14 | 23-01-2006 10:08:21 |
![]() |
|