Adefesios en RPG
APIS
Aplicaciones multi-idioma
Apuntadores
Archivos
as400
AS400 Para Principiantes
Base de Datos
Best practices
Better Performance
Botones en RPG
Calidad Profesional
CLP
Colas de Datos
Comandos PC
Cursos
DEBUG en RPG
Desarrollo de Software
Divertidos
EDI
EDI X12
Edward de Bono
el arte de la guerra
FAQS
Fechas en RPG
FRAUDE
FTP
Gerencia de Sistemas
Grupos de activacion
Herramientas Gerenciales
ILE
ilerpg
indicadores
Iseries
JSON
Lista de Códigos de Error
Master Mind
Mejorando el performance
Mejores Prácticas en RPG
micros
Migración
modulos
Monitoreo de Errores
Mouse
OCCUR
pantalla verde
Pantallas
Peores Practicas
Performance
podcast
pointers
Procesos
Programación CL
Ratón
rpg
RPG-FREE
RPGLE
Seguridad
Servidores
Sesion 1 fundamentos de internet
SEU
Sockets
SQL
SQLRPG
Subfiles
subprocedures
Sun Tzu
Tarjetas de Crédito
Tiempos de Respuesta
Tips en RPG
Transfer Control
Triggers
Utilidades
Ventanas moviles
Versiones
videos
Bienvenidos a Iseries Venezuela
Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.
The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.
The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.
Thursday, October 29, 2009
Mejores Prácticas de Programacion RPG
Aunque nos suministren miles de herramientas en el Iseries para desarrollar mejores programas, tendemos a arrastrar viejos hábitos que aprendimos en RPG II y RPG III. Con la incorporación de RPG4 y de Ile-Rpg es fundamental desarrollar códigos "limpios" que a su vez reduzcan tiempos de respuesta en los procesos.
A manera de ejemplo, supongamos que tenemos tres analistas en una competencia. El reto es optimizar el siguiente código en RPG III. Lo dejamos en esta versión de RPG porque muchas veces es utilizado como excusa el hecho de no tener experiencia en RPG4, Free RPG o IleRpg para generar un código engorroso y con un tiempo de ejecución innecesariamente alto.
En un ejercicio de imaginación supongamos los siguientes Costos:
- Cada IF cuesta: un segundo.
- Encender o apagar un indicador: 1 segundo
- Cada Z-add cuesta dos segundos:
son dos instrucciones en una: primero mover cero y luego sumar.
-Cada comparación: 1 segundo
-Llamar a la rutina: 1 segundo
El código original cuesta en tiempo SIEMPRE lo siguiente:
Cuerpo principal: 8 segundos
Rutina PROCES: 18 segundos
Total: 26
Código Original:
C................SETOF....................010203...3 segundos
C..CODTRA.IFEQ '01'...............................1 segundo
C................SETON....................01...........1 segundo
C................EXSR GENE.........................1 segundos
C................ENDIF
C*
C.CODTRA...IFEQ '02'..............................1 segundo
C................SETON.....................02..........1 segundo
C................EXSR GENE.........................1 segundos
C................ENDIF
C*
C.CODTRA...IFEQ '03'..............................1 segundo
C................SETON.....................03..........1 segundo
C................EXSR PROCES.......................1 segundo
C................ENDIF
...PROCES........BEGSR
.................INSTRUCCIONES PREVIAS....
................................
................................
01..............Z-ADD1.................STACA1..............3 segundos
02..............Z-ADD2................STACA1..............3 segundos
03..............Z-ADDDIDCOB....DIADE1.............3 segundos
03..............Z-ADDMEDCOB...MESDE1.............3 segundos
03..............Z-ADDA#DCOB....A#ODE1.............3 segundos
03..............Z-ADD3.................STACA1..............3 segundos
.................ENDSR
El primer analista propone lo siguiente:
C.................SETOF...........010203............3 segundos
C.................SELECT
C.CODTRA...WHENEQ.....'01'...........1 segundo
C.................SETON...........01............1 segundo
C.CODTRA...WHENEQ....'02'............1 segundo
C.................SETON..........02.............1 segundo
C.CODTRA...WHENEQ....'03'............1 segundo
C.................SETON..........03.............1 segundo
C.................ENDSL
C.................EXSR........PROCES.............1 segundo
A simple vista se detecta una mejora significativa. EL Select, permite saltar las comparaciones innecesarias. Si CODTRA tiene un valor de ´01´ el sistema no continua realizando comparaciones sino que enciende el indicador correspondiente y ejecuta la rutina PROCES. En el peor de los casos, suponiendo que todos los códigos CODTRA son ´03´ los tiempos de respuesta se igualan en esta parte del proceso, entre el código original y esta propuesta. Es decir ambas duran 8 segundos en el cuerpo principal del progtama.
Veamos que sucede en la rutina PROCES:
El analista propone declarar previamente dos estructuras de datos. Esto reduce la cantidad de MOVE. Ademas sustituye los Z-ADD por MOVE que consume menor tiempo de respuesta. En el peor de los casos el tiempo de ejecución de la rutina PROCES totaliza 5 segundos, suponiendo que siempre CODTRA vale ´03
Declarar dos DS en la hoja D o en la hoja I (depende si es RPG 3/RPG4)
IDS
..........FECHA....1 80
..........DIA.........1 20
..........MES........3 40
..........AÑO........5 80
IDS
..........FECDES....1 80
..........DIADES....1 20
..........MESDES....3 40
..........AÑODES....5 80
PROCES BEGSR
.............INSTRUCCIONES PREVIAS....
................................
................................
.............Select
............*IN01...WHENEQ...*ON.......1 segundo
...................MOVE....1......STACA1....1 segundo
............*IN02...WHENEQ...*ON.......1 segundo
...................MOVE....2......STACA1....1 segundo
............*IN03 WHENEQ.....*ON.............1 segundo
...................MOVE....FECHA....FECDES 1 segundo
..................MOVE....3........STACA1 1 segundo
..............EndSl
..............ENDSR
Resumiendo: esta primera propuesta cuesta en tiempo:
Cuerpo Principal: 8 segundos
Rutina PROCES: 5 segundos
Total 13
Propuesta del Analista 2
Este analista propone dejar el cuerpo principal igual que el primer analista pero
sugiere modificar PROCES como sigue:
.....1....DO.....3.....X.....20............1 segundo
........IF......*IN,X....*EQ....*ON.......1 segundo
........MOVE.....X.......STACA1.......1 segundo
........IF X..*EQ 3......................1 segundo
........MOVE FECHA FECDES......1 segundo
........ENDIF
........ENDIF
ENDDO
Quizas los *IN,X deslumbren de entrada porque pareciera que hacen la tarea
del programador en forma más automática. Sin embargo, si contamos los segundos
que consume cada iteración del lazo. Los tiempos consumidos igualan la propuesta
del segundo analista. Se ha cambiado la forma pero no se han mejorado los tiempos de respuesta entre una analista y el otro. Ambas propuestas producen el mismo resultado.
Propuesta del Analista 3
C........MOVE....CODTRA....CONTROL.....20....(1era Opción)...1 segundo
C
C........EXSR....PROCES.....1 segundo
Primera Opción: Si la rutina PROCES modifica en sus intrucciones previas el valor de CODTRA entonces se guarda su valor en la variable Numérica CONTROL. Tarda dos segundos el cuerpo del programa.
Segunda Opción: Si la rutina PROCES no modifica el valor de CODTRA se salta este paso del move y el cuerpo principal solo debe llamar a PROCES tarda solo 1 segundo.
Veamos que sucede en PROCES. Cabe destacar que, la variable CONTROL está sustituyendo lo que en el programa original era la variable numérica STACA.
PROCES BEGSR
INSTRUCCIONES PREVIAS....
................................
................................
CONTROL IFEQ 3 (1era Opción)
MOVE FECHA FECDES
ENDIF
CODTRA IFEQ 3 (2da Opción)
MOVE FECHA FECDES
ENDIF
ENDSR
La rutina Proces dura en ambas opciones dos segundos.
El mayor tiempo de ejecución sería de 4 segundos y el menor tiempo de 3 segundos.
Si comparamos 3-4 segundos con 26 segundos, hemos reducido el tiempo de respuesta a
por lo menos un 78% de su duración original. Ademas de generar un código mucho mas legible y fácil de mantener.
Introducir comentarios en el código y declarar constante con nombres significativos en la hoja D o en la hoja I según sea la versión RPG facilita la lectura del programa. Puede declararse por ejemplo una constante llamada DEBITO con el valor `01` otra constante llamada Credito con valor ´02´y una tercera llamada DEUDA con valor ´03´´. EN lugar de preguntar por el valor ´01´podriamos pregunta IF CODTRA = DEBITO. Haciendo mas fácil el mantenimiento del programa.
Si te pareció interesante, reenvialo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.
Autor: Ing. Liliana Suárez
Labels:
Mejores Prácticas en RPG
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment