
Ricardo Pina
Desarrollo y Servicios Informáticos
Profesionales
www.dsip.com.ar
En el Load e Init traes informacion o cursores vacios?
Bandiciones
On 9 dic, 09:45, Ricardo Pina <ricp...@gmail.com> wrote:
> Hola Gente
>
> Conocen alguna manera de acelerar la carga de los formularios, en mi caso
> tengo varios formularios con pageframes y cargados de grillas, combobox y
> listbox enlazados a cursores y estan tardando alrededor de 20 segundos y
> generan quejas dentro de mis queridos usuarios.
> Alguna manera de hacer algún preload o distribuir la carga entre las
> páginas del formulario de manera que se muestre y puedan cargar datos en la
> primer página mientras sigue la carga del resto de las páginas
> O directamente como optimizar los pasos de carga del formulario
>
> Gracias de antemano por sus comentarios, voy a introducirme en el mundo
> google a ver si encuentro algo al respecto y publico
>
> Saludos
>
> --
> * *
>
> * Ricardo Pina*
>
> *Desarrollo y Servicios Informáticos*
>
> * Profesionales
> www.dsip.com.ar*
>
> **
Yo hago lo mismo (y creo que es lo correcto) y nunca un formulario se
me ha demorado mas 2 segundos en abrir aun con formularios repletos de
combobox y grillas..... haz chequeado si hay algun tipo de lentitud en
la red?.... Recuerdo hace un tempo atras que tenia un formulario que
de un dia para otro comenzo a demorar al abrir..... Despues de varias
pruebas descubri que habia un indice corrupto en esa tabla.....
tambien seria bueno que chequearas la integridad de tus tablas.... en
mi caso me ocurrio con SQLServer.
Espero que te pueda servir mi comentario, mientras tanto estare
pensando en otra cosa.
Bendiciones
On 9 dic, 10:17, Ricardo Pina <ricp...@gmail.com> wrote:
> Hola Extremo
>
> Te cuento
> Son tablas nativas
> En el Init abro las tablas y genero los cursores de apoyo clientes ,
> proveedores , productos , conceptos y demás ( Select sql) que enlazo a
> listbox o combobox que pueden estar a su vez en columnas de grillas
> Los cursores no llegan a 5mil registros los mas grandes y los cursores de
> movimientos los genero vacios o no los genero en la carga inicial
>
> Saludos
>
> **- Ocultar texto de la cita -
>
> - Mostrar texto de la cita -
La solucion de llenar la data en el activate en lo personal no me
gusta mucho, yo tengo una aplicacion que funciona asi, y hacerle
mantencion a ese form es todo un parto. Mi opinion es que tomes esa
alternativa como ultima solucion.
La solucion que da Samuel es mas rapida de implementar. yo nunca la he
usado asi pero si Samuel dice que de esa forma se mejora el
performance, entonces es cosa de hacer pruebas.
Bendiciones
On 9 dic, 12:54, Ricardo Pina <ricp...@gmail.com> wrote:
> Hola Samuel
>
> Creo que este debe ser mi caso también, Carlos Farías fué más drástico y
> más óptimo, claseando directamente las páginas, tu alternativa también es
> muy buena, se me ocurre poner los pages vacios o con los controles vacios y
> llenarlos por demanda en el activate de cada una de ellas.
>
> if thisform.pageframe.paginaX.propiedadqueindicaempty
> thisform.llenacontrolesdepagina(paginaX)
> this.propiedadqueindicaempty = .F.
> endif
> ¿ Estoy en lo correcto ?
>
> Saludos
>
Si utiliza el entorno de datos del Diseñador de formularios o el Diseñador de informes, el rendimiento de la apertura de la tabla es mucho más rápido que si se ejecutan los comandos USE, SET ORDER y SET RELATION en el evento Load del formulario. Cuando use el entorno de datos, Visual FoxPro utiliza las llamadas al motor de nivel inferior para abrir las tablas y configurar los índices y las relaciones.
Utilice conjuntos de formularios solamente cuando necesite que un grupo de formularios comparta una sesión privada de datos. Cuando utilice un conjunto de formularios, Visual FoxPro crea instancias de todos los formularios y de todos los controles de todos los formularios del conjunto, aun cuando sólo se muestre en pantalla el primer formulario del conjunto. Esto puede resultar lento e innecesario si los formularios no tienen que compartir una sesión privada de datos. En su lugar, debería ejecutar DO FORM para los otros formularios cuando sean necesarios.
Sin embargo, si utiliza un conjunto de formularios, obtendrá una pequeña mejora del rendimiento cuando tenga acceso a los formularios del conjunto, porque los formularios ya estarán cargados aunque no serán visibles.
Los marcos de página, al igual que los conjuntos de formularios, cargan todos los controles de cada página en el momento de cargar el marco de página lo que da lugar a una demora perceptible cuando se carga este último. En su lugar, podría cargar los controles de página dinámicamente a medida que se fueran necesitando, creando una clase fuera de los controles de cada página y cargándolos cuando se activara la página.
Para cargar dinámicamente los controles de página
Por ejemplo, si la clase de controles se llama cnrpage1, debe agregar el código siguiente:
IF THIS.ControlCount = 0
THIS.AddObject("cnrpage1","cnrpage1")
THIS.cnrpage1.Visible = .T.
ENDIF
Puede reducir el tiempo de carga de un formulario que contenga un gran número de controles enlazados a datos si retrasa el enlace de esos controles hasta el momento en que sean necesarios.
Para enlazar dinámicamente controles a datos
customer.company:* Check to see if the control has been bound yet. IF THIS.RecordSource = "" * Set the record source to the right value * and set the record source type to "fields" THIS.RecordSource = "customer.company" THIS.RecordSourceType = 6 THIS.Refresh ENDIF
Si realiza varios cambios en la pantalla, por ejemplo, cambia los valores de varios controles a la vez, puede reducir el tiempo global necesario para actualizar la pantalla si retarda la actualización de pantalla hasta que se realicen todos los cambios. Por ejemplo, si hace que los controles queden visibles o invisibles, cambia los colores de los controles o mueve los registros de controles dependientes, resulta mucho más eficaz retardar el relleno de color de estos controles hasta que se hayan completado todos los cambios:
Para retardar la actualización de la pantalla
El ejemplo siguiente cambia varias propiedades de la pantalla a la vez, se desplaza a un registro nuevo y sólo entonces actualiza la pantalla con información nueva. Si LockScreen no se hubiera establecido como verdadero, en cada una de estas operaciones se volverían a dibujar los controles afectados individualmente y el rendimiento global de la actualización parecería retardado.
THISFORM.LockScreen = .T. THISFORM.MyButton.Caption = "Save" THISFORM.MyGrid.BackColor = RGB (255, 0, 0) && Red SKIP IN customers SKIP IN orders THISFORM.Refresh THISFORM.LockScreen = .F.
Sugerencia Esta técnica no proporciona ninguna ventaja si está actualizando un único control.
Puesto que el método Refresh y el evento Paint suelen utilizarse con frecuencia, puede aumentar el rendimiento de formularios si reduce la cantidad de código de estos métodos. De forma análoga, para reducir el tiempo de carga de un formulario, puede mover código desde el evento Init a los eventos usados con menos frecuencia como Activate, Click y GotFocus. Después, use una propiedad del control (como Tag o una propiedad personalizada) para hacer un seguimiento de si el control ya ha ejecutado el código que sólo necesita ejecutarse una vez.