Comprobación de las aplicaciones, casos reales de error
Una aplicación destinada a ser ejecutada en red debe verificarse en el grafo en condiciones similares a su uso real (con accesos concurrentes y archivos de tamaño real).
El rendimiento de un código ejecutado localmente o en una red "monopuesto" puede ser completamente diferente en un caso de uso real en una red multiusuario.
Lista no exhaustiva de errores comunes encontrados en las aplicaciones existentes. Todos estos ejemplos proceden de incidentes reales notificados.
1. El 90% de los problemas de lentitud se deben a claves inadecuadas:
Resolución: Definir las claves adecuadas en el análisis
En sus aplicaciones, compruebe los criterios de filtros, vistas y consultas. Para que get tenga un buen rendimiento en tiempo de ejecución, los archivos deben tener las claves correctas y las claves compuestas. Las claves necesarias para el buen funcionamiento de get dependen de las condiciones de clasificación. Debe examinar detenidamente el análisis, los filtros, las vistas y las consultas para seleccionar las mejores claves posibles.
Esta es la razón por la que WINDEV propone un optimizador de consultas que analiza sus consultas y encuentra las mejores claves para ellas. Para optimizar una consulta, cuando se abra una consulta en WINDEV, en el panel "Consulta", en el grupo "Analizar", haga clic en "Optimizar la consulta".
Es un mecanismo de automatic que proporciona buenos resultados. Sin embargo, para las consultas complejas o para las consultas que utilizan varios parámetros opcionales, esta opción no sustituye a un especialista astuto en bases de datos.
Es difícil decir qué ganancia de rendimiento se puede lograr utilizando las teclas correctas, ya que las situaciones pueden cambiar mucho.. Esta ganancia puede ir desde una mejora del 10% en el tiempo de procesamiento hasta una mejora del 100% e incluso más.
Atención: si la prueba de rendimiento de una aplicación multiusuario se realiza en modo monousuario, los resultados de la prueba no son realistas. Obviamente, una aplicación debe ser probada en su configuración en tiempo de ejecución.
2. Los archivos no están "optimizados".
Resolución: Iniciar WDOptimizer o planificar una optimización Process en la aplicación (
HIndex o
HStatCalculate)
Los archivos para los que se han realizado recientemente cálculos estadísticos (o una operación de reindexación) serán más eficientes.. Esta operación no requiere ningún cambio en la aplicación. Sin embargo, es necesaria una operación de mantenimiento regular si desea mantener accesos rápidos a una base de datos.. Para optimizar el acceso a los archivos, utilice WDOptimizer que se proporciona con WINDEV o utilice
HStatCalculate,
HIndex.
3. Uso excesivo de HCreationIfNotFound
Resolución: No utilizar
HCreationIfNotFound a menos que sea necesario, y utilizar la constante
hDelayedOpening cuando sea necesario utilizar
HCreationIfNotFound.
Es común encontrar en las aplicaciones una instrucción HCreationIfNotFound("*") o una serie de HCreationIfNotFound en el código de inicialización del proyecto. Esta función realiza un gran número de comprobaciones y búsquedas y, por lo tanto, utiliza mucho tiempo de ordenador.. Para no perder tiempo, puede solicitar una verificación diferida utilizando la constante hDelayedOpening con la función HCreationIfNotFound. Mejor aún, puede utilizar esta sentencia sólo para los archivos que pueden ser borrados o recreados.
Para las aplicaciones que utilizan un gran número de archivos, este cambio puede ahorrar una cantidad significativa de tiempo.
4. Inicializaciones no requeridas o mal colocadas
Resolución: Elimine las inicializaciones inútiles o muévalas a una ubicación más apropiada.
Al inicializar las ventanas que contienen varios planos o pestañas, no inicialice todos los planos y pestañas tan pronto como se abra la ventana.. Sólo se ejecutan las vistas y consultas de los otros planos cuando el usuario accede a ellos.
Por el contrario, utilice
HOptimizeQuery en el código de apertura de ventana para que la futura ejecución de estas consultas sea aún más rápida.
5. Fuentes de datos dinámicas mal definidas (no definidas en el editor de consultas o en los editores de modelos de datos).
Resolución: Utilice el tipo "Data Source" para cada fuente de datos dinámica.
Cuando las vistas son creadas por
HCreateView o cuando las consultas son creadas por
HExecuteSQLQuery, se debe especificar un nombre. Este nombre le permite utilizar la fuente de datos (vista o consulta) como un archivo. Para recuperar el contenido de los elementos, utilice ViewName.ItemName o QueryName.ItemName.
En el editor de código, ViewName (o ItemName) no se reconoce. Para que el compilador de WLanguage reconozca sus opiniones y consultas, debe declararlas. Le recomendamos que utilice el tipo "
Fuente de datos" para declararlos.
6. Uso indirecto en un elemento sin especificar su tipo
Resolución: Especifique el tipo de indirección
Puedes usar la indirecta (llaves { }) para construir dinámicamente un nombre de artículo (o un nombre de Variable...). Los indirectos se utilizan para crear código genérico pero estos códigos son un poco más lentos. Por lo tanto, el código que realiza operaciones de lectura, modificaciones y adiciones y que utiliza la indirección puede ser más lento a la hora de resolver las indirecciones que a la hora de realizar las operaciones reales en los ficheros de datos HFSQL.. Para acelerar los procesos que utilizan el indirecto, tiene la capacidad de especificar el tipo de indirecto. Para obtener más información, consulte
Operadores indirectos.
Ejemplo:{NombreDeArchivo+"."+NombreDeArtículo,indItem}=5
7. Uso del perfil de rendimiento para detectar las ralentizaciones
Resolución: Mejorar el código específico que se considera demasiado lento
Hay otros tipos de errores a evitar (operaciones de lectura múltiple o inicializaciones inútiles, ....) u otros tipos de optimización posibles (por ejemplo, recomendamos encarecidamente que utilice HFSQL Client/Server en una red lenta o con un acceso DSL).
Cada caso es diferente, pero la regla general es que cuando se detecta una ralentización, se puede eliminar encontrando su origen.
Analizador de rendimientoproporcionada con WINDEV es una gran herramienta que permite identificar los códigos que tardan en ejecutarse.