![]() |
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?
|
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 |
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. |
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( |
Y que hace relacionarProv?
|
Resulta que fin = 2, porque solo estoy relacionando 2 mmmm... |
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 :) |
Y también sería necesario saber qué estás haciendo y qué quieres conseguir.
|
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 |
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. |
El extraerID se los dejó por aquí:
Código:
var |
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. |
Tienes razón, voy a intentarlo y comento más tarde o mañana.
Gracias a todos. |
La franja horaria es GMT +2. Ahora son las 12:41:13. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi