Compartir a través de


Optimizar programas

Escribiendo código cuidadosamente, puede escribir programas más rápidos. Son varias las maneras de aumentar el rendimiento de los programas en Visual FoxPro:

  • Seguir las sugerencias generales sobre el rendimiento de programación que aparecen a continuación.
  • Usar expresiones de nombres en lugar de la sustitución mediante macros.
  • Hacer referencia a propiedades de objetos de forma eficaz.

Sugerencias generales sobre el rendimiento de programación

Para escribir programas más rápidos, siga las recomendaciones que se indican a continuación.

  • Elija el tipo de datos correcto. En particular, use el tipo de datos Integer para la información numérica cuando sea posible, puesto que se procesa de forma más eficaz. Siempre que sea posible, use el tipo de datos Integer para los valores de claves externas y principales, lo que dará lugar a archivos de datos e índices más pequeños (y, por tanto, más rápidos), y a combinaciones más rápidas.

    Nota   Para ver un ejemplo que muestre cómo crear un índice más pequeño y, por tanto, más rápido, ejecute Solution.app en el directorio ...\Samples\Solution de Visual FoxPro. Elija Ver los ejemplos mediante una lista filtrada, seleccione Índice en la lista desplegable y después elija Crear índices pequeños mediante BINTOC( ) en la lista que aparece.

  • Evite volver a abrir archivos, puesto que esto ralentiza el rendimiento. En su lugar, asigne archivos a áreas de trabajo cuando los abra y después use el comando SELECT para elegir un área de trabajo específica cuando se precise.

  • Si es posible, utilice bucles FOR … ENDFOR, pues son más rápidos que los bucles DO WHILE … ENDDO.

  • Cuando copie datos de varios campos, SCATTER TO ARRAY es más rápido que SCATTER MEMVAR.

  • Para optimizar el uso de la memoria, evite la creación de objetos antes de necesitarlos y borre los objetos cuando deje de trabajar con ellos para liberar memoria.

    Sugerencia   Puede comprobar cuánta memoria consume cada objeto si llama a la función SYS(1016).

  • Envíe los resultados a la ventana superior siempre que sea posible; la actualización de ventanas colocadas detrás de la superior es bastante más lenta. No se debe, en ningún caso, hacer que los resultados se desplacen detrás de una ventana.

  • Deshabilite la presentación del estado con el comando SET TALK OFF, que elimina el trabajo de la actualización de la pantalla.

  • Establezca el comando SET DOHISTORY como OFF para evitar la actualización de la ventana de comandos cada vez que se ejecute un programa.

Usar expresiones de nombre en lugar de sustitución de macros

Si utiliza expresiones de nombre en lugar de la sustitución de macros, el rendimiento del programa aumentará notablemente. Por ejemplo, si asigna un valor a la variable cFile, una expresión de nombre creada con cFile será más rápida que la sustitución de macros.

cFile = "CUST"
use &cFile      && Macro substitution, slow
use (cFile)      && Name expression: faster, preferred

Referencias a propiedades de objetos de forma eficaz

Comprendiendo la forma en que funciona Visual FoxPro con las propiedades y objetos, puede optimizar la ejecución de las aplicaciones.

Optimizar referencias a una propiedad repetidas

Cuando haga referencia a una propiedad de objeto con la sintaxis objeto.propiedad, Visual FoxPro debe buscar el objeto antes de poder tener acceso a la propiedad. Si debe tener acceso a la propiedad repetidas veces, esta estrategia de búsqueda puede ralentizar el rendimiento.

Para evitar las referencias al mismo procedimiento varias veces (como en un bucle), lea el valor de la propiedad en una variable, realice los cambios y establezca la propiedad una sola vez cuando termine. Por ejemplo, el código siguiente rellena una matriz de propiedades; para ello, crea primero una matriz en la memoria, la rellena y después establece la propiedad una sola vez al final:

* Copy string to a local variable
lcChar = THISFORM.cCharString
LOCAL laCharArray[256]   && Create local array
FOR nCounter = 1 to 256
   laCharArray[x] = SUBSTR(laChar,x,1)
ENDFOR
* Copy the local array to the property array
ACOPY(laCharArray,THISFORM.aCharArray)

Hacer referencia a múltiples propiedades de forma eficaz

Si actualiza más de una propiedad para el objeto, Visual FoxPro debe buscar el objeto varias veces, lo que puede afectar al rendimiento. En el ejemplo siguiente, el código hace que Visual FoxPro busque en cuatro objetos (como THISFORM, pgfCstInfo, pgCstName y txtName) para encontrar la propiedad que se va a establecer. Dado que el código establece dos propiedades, la búsqueda a cuatro niveles se realiza dos veces:

THISFORM.pgfCstInfo.pgCstName.txtName.Value = ;
 "Fred Smith"
THISFORM.pgfCstInfo.pgCstName.txtName.BackColor = ;
 RGB (0,0,0)  & Dark red

Para evitar este volumen de trabajo, use el comando WITH … ENDWITH. Este método hace que Visual FoxPro busque el objeto una sola vez. Por ejemplo, el ejemplo siguiente realiza la misma tarea que el anterior, pero de forma más rápida:

WITH THISFORM.pgfCstInfo.pgCstName.txtName
   .Value = "Fred Smith"
   .BackColor = RGB (0,0,0)  & Dark red
ENDWITH

También puede almacenar una referencia a un objeto en una variable y después incluir la variable en lugar de la referencia al objeto:

oControl = THISFORM.pgfCstInfo.pgCstName.txtName
oControl.Value = "Fred Smith"
oControl.BackColor = RGB (0,0,0)  & Dark red

Vea también

Optimizar formularios y controles | Optimizar controles ActiveX | Optimizar las aplicaciones | Optimizar el sistema | SELECT | FOR … ENDFOR | SCATTER