Accueil du site > Les articles > Programmes compilés en RT au lieu de LR, à quoi ça sert ?
Version à imprimer Enregistrer au format PDF

Programmes compilés en RT au lieu de LR, à quoi ça sert ?

jeudi 12 août 2004, par Grégory Jarrige Visites  3328 Première mise en ligne le mardi 21 octobre 2003.

Pour optimiser les temps de traitement, il peut être utile de compiler un programme en RT au lieu de LR. Cela se fait par un SETON RT en RPG ou dans ADELIA en modifiant les paramètres de compilation. Sur ADELIA/400, on accède à ce paramétrage par l’écran de demande de compilation grâce à la touche "F18=Accès aux options de génération", sur ADELIA IWS on accède à ce paramétrage au moyen du bouton "Caractéristiques".


Comment ça marche ?

LR est un indicateur de fin, ce qui signifie que le programme est désactivé et libère complètement la mémoire qu’il occupait lors de son exécution

RT est un indicateur de retour, ce qui signifie que le programme demeure actif en mémoire centrale et que les fichiers ouverts par le programme restent ouverts. Il faut donc les fermer au moyen de la commande AS/400 RCLRSC pour libérer la mémoire à la dernière utilisation.

Avantage du RT :

Le programme reste chargé en mémoire et les fichiers qu’il utilise restent ouverts ce qui réduit les temps de réponse à partir du second appel du programme, puisque le système n’a pas à charger le programme et à ouvrir ses fichiers une seconde fois. Cette solution est pratique notamment pour appeler des programmes de génération d’écritures en interactif de façon répétitive (dans un module de saisie de facture ou d’encaissement, par exemple).

Inconvénient du RT :

Comme indique plus haut, les fichiers demeurés ouverts après utilisation du programme doivent impérativement être refermés avec la commande AS/400 RCLRSC. Si vous oubliez cette consigne vous pouvez vous attendre à des problèmes. En effet, les fichiers restant ouverts, si un utilisateur ayant accès à plusieurs environnements passe d’un environnement A à un environnement B pour appeler le même module de saisie de facture par exemple, les fichiers ouverts dans l’environnement A restent ouverts dans l’environnement B et les données normalement destinées aux fichiers de l’environnement B vont se déverser en réalité dans les fichiers de l’environnement A. Vous pouvez me croire, j’en ai fait l’amère expérience.

Exemple :

Dans un module de facturation, j’appelle au moyen d’un CL le programme I1901 qui lui-même appelle le programme de génération d’écritures R1901 compilé en RT au lieu de LR. Voici le source du CL contenant la commande RCLRSC, vous voyez qu’il est placé juste après l’appel du programme I1901. Les paramètres utilisés sont importants, je vous laisse vous reporter à l’aide de la commande pour plus de détails.

Remarque d’un collègue :

L’instruction RCLRSC n’est pas obligatoire, elle est même ’violente’ : elle ferme tout ce qui traine, alors que si tu utilises plusieurs programmes résidants en même temps tu ne veux peut-être en purger qu’un seul.

On peut obtenir la même chose en utilisant un paramètre supplémentaire dans ton programme, lui indiquant comment il doit se clôturer :
SI param = ’RT’
 RETOURNER en adélia
SI param = ’LR’
 TERMINER en adélia

En GAP, on peut faire la même chose avec un SETON RT ou un SETON LR. Plus besoin dans ce cas de CL d’appel contenant un RCLRSC.

Ma réponse :

C’est vrai que le RCLRSC est un peu violent, mais on ne sait pas forcément quand on va avoir besoin de décharger le programme de la mémoire. Si on reprend l’exemple du programme interactif de saisie I1901 qui appelle le batch R1901 (en RT) à chaque création d’écriture, c’est le I1901 qui gère les appels, donc comment faire si l’utilisateur souhaite sortir du I1901 par F3, faut-il rappeler le R1901 en lui disant de se fermer immédiatement en LR ? Pas intérêt à se tromper sur les différents cas de figure de sortie du I1901 (F3, F12, ENTREE...). Ceci dit, je pense que la méthode préconisée par mon collègue ainsi que la méthode du RCLRSC sont aussi acceptables l’une que l’autre, à chacun de voir selon le problème à traiter et ses goûts personnels.