Compression/décompression d'objets. (nouveauté V2 R1.0) # Compression Procédé qui consiste à supprimer les caractères répétitifs, des blancs ou des chaînes de caractères des données traitées et de remplacer les caractères répétitifs par des caractères de contrôle. La compression réduit la quantité d'espace mémoire nécessaire aux données. Exemple: non compressé: ' ', compressé: '*8 ' <-8esp-> <CTL,8fois' '> Décompression Fonction inverse de la compression (les données reprennent leur forme initiale), durant laquelle les caractères de contrôle sont remplacés par des données réelles. |
# La commande CPROBJ (Comprimer un objet) permet de comprimer des objets. Restrictions : o Pour comprimer un objet, vous devez disposer du droit de gestion de l'objet (*OBJMGT). o Les objets sauvegardés avec libération de mémoire ne peuvent être ni comprimés, ni décomprimés. o Les objets comprimés ne peuvent pas être sauvegardés pour une édition antérieure à la version 2, édition 1 du système OS/400. o Les programmes sans valeur de validation correcte ne sont pas comprimés. o Les programmes créés avant l'édition 3.0 d'OS/400 et non retraduits (à l'aide de la commande CHGPGM (Modifier un programme)) ne peuvent pas être comprimés car aucune valeur de validation n'a été générée. o Avant de comprimer un programme système, vous devez arrêter tous les sous-systèmes actifs. o Ne peuvent être comprimés que les objets *FILE de type fichiers écran ou fichiers imprimante(DSPF,PRTF) |
Le paramètre OBJ (objet(s) à comprimer accepte les valeurs: *ALL ou nom-objet-générique*, nom-objet. Les valeurs possibles pour la bibliothèque sont les suivantes : *LIBL *USRLIBL *CURLIB *ALL (y compris QSYS) *ALLUSR Toutes les bibliothèques utilisateurs y compris : QDSNX, QGPL, QGPL38, QPFRDATA, QRCL, QS36F, QUSER38 et QUSRSYS. nom-bibliothèque |
Type d'objet acceptant la compression *FILE Les fichiers écran et imprimante uniquement *MENU Les menus système uniquement # *PNLGRP Les groupe de panneaux (générés par UIM ou fournis avec le système) *PGM Les programmes (sans restriction) *ALL est admis. |
Nb jours d'inutilisation Indique le nombre de jours pendant lesquels l'objet n'a pas été utilisé. S'il n'a pas été utilisé pendant un nombre de jours supérieur à celui indiqué, il est comprimé. Dans le cas contraire, il reste décomprimé. Les valeurs possibles sont les suivantes : *NONE L'objet est comprimé, quel que soit le nombre de jours pendant lesquels il est resté inutilisé. 1-366 Indiquez le nombre de jours. Les valeurs admises sont comprises entre 1 et 366. |
Option de programme Indique si la totalité du programme ou seulement les tables d'observabilité sont comprimées. Les valeurs possibles sont les suivantes : *ALL La totalité du programme (flot d'instructions et tables d'observabilité) est comprimée. # *OBS Seules les tables d'observabilité sont comprimées. (les tables d'observabilité servent au DEBUG) Elles peuvent être enlevées par la commande CHGPGM RMVOBS(*ALL) ce qui permet de gagner de la place mais interdit le debug pour ce programme (recréation du pgm nessécaire) La compression des tables d'observabilité constitue peut-etre le moyen terme le plus interessant. |
Les commandes DSPOBJD et RTVOBJD permettent de savoir si un objet est comprimé, l'information a été ajoutée au fichier QADSPOBJ de QSYS. La décompression d'un objet est automatique lors de son utilisation Open pour un fichier Call pour un pgm Aide pour un panneau d'aide Go pour un menu (système) Mais va rendre cette fonction plus longue,il est donc conseillé de ne pas comprimer les objets souvent utilisés. A noter que dans le cas de pgm, -seule la partie instruction est décompressée lors d'un CALL -la partie "tables d'observabilité" n'est décompressée que par STRDBG. Il est donc possible de comprimer (partie "observabilité") TOUS les pgms. |
Cette décompression est PROVISOIRE pour tous les types d'objets autre que pgm. Un objet va rester "décompressé provisoirement", jusqu'à: - un IPL (tous les objets provisoirement décompressés sont comprimés) - l'utilisation de la commande RCLTMPSTG qui permet de demander la recompression d'objets pour une bibliothèque ou un groupe (*ALL, *ALLUSR ...) si l'objet n'a pas été utilisé depuis un certain nombre de jours. - l'utilisation de l'objet plus de CINQ fois ou plus de deux jours depuis le dernier IPL auquel cas la décompression devient définitive. - l'utilisation de la commande DCPOBJ (décompression d'un objet) qui rend cette décompression définitive. Cette décompression est DEFINITIVE pour un pgm. Il faut donc planifier les recompression d'objets |
# La commande DCPOBJ (Décomprimer un objet) permet de décomprimer définitivement des objets. Dans ce cas, leur forme comprimée et leur forme temporaire, le cas échéant, sont supprimées. Les paramètres objet,bibliothèque et type d'objet admettent les même valeurs que pour la compression. Le paramètre Option de programme (PGMOPT) admet les valeurs suivantes: *ALL La totalité du programme (flot d'instructions et tables d'observabilité) est décomprimée. *INS Seul le flot d'instructions est décomprimé. |
Quelques exemples de compression: (les tailles sont en octets) ! Gain ! ! Type d'objet ! Sans compression ! Avec compression ! en O ! en % ! !---------------!-------------------!------------------!------!------! ! *FILE (dspf) ! 8704 ! 4608 ! 4024 ! 46,2 ! ! ! ! ! ! ! ! *PNLGRP ! 4096 ! 2048 ! 2048 ! 50,0 ! ! ! ! ! ! ! ! *PGM (cl) ! 119808 ! 95232 (*OBS) !24576 ! 20,5 ! ! ! ! 73728 (*ALL) !46080 ! 38,4 ! ! ! ! ! ! ! ! *PGM (le même ! 73216 ! 52224 (*ALL) !20992 ! 28,6 ! ! apres RMVOBS) ! ! ! ! ! ! ! ! ! ! ! ! *MENU (MAIN) ! 14336 ! 6144 ! 8192 ! 57,1 ! ! ! ! ! ! ! !---------------!-------------------!------------------!------!------! |