Loading...
Select Version
&pagelevel(3)&pagelevel
Das folgende Beispiel zeigt eine Prozedur, in der alle Optimierungsmaßnahmen aus den vorangegangenen Abschnitten angewendet wurden. Die optimierte Prozedur (erstellt vom Team „BS2000 Performance Controlling and Modelling“) benötigt nur noch 62% der CPU-Zeit gegenüber der Ausgangsprozedur, die in weniger performanter Schreibweise erstellt war.
Optimierte Prozedur (empfohlene Schreibweise):
/SET-PROCEDURE-OPTIONS / /OPEN-VARIABLE-CONTAINER CONTAINER-NAME=CONTFS, - / FROM-FILE=*LIBRARY-ELEMENT(LIBRARY=BAD.LIB) /DECLARE-VARIABLE VARIABLE-NAME=C-FS-L(TYPE=*STRUCTURE) - / , MULTIPLE-ELEMENTS=*LIST, CONTAINER=CONTFS / /&* The list variables and the output of show-file-attr / DECLARE-VARIABLE VARIABLE-NAME = ( - / LIST ( TYPE = *STRING ), - / TSIL ( TYPE = *STRING ), - / FS-OUT ( TYPE = *STRUCTURE ), - / ), MULTIPLE-ELEMENTS=*LIST / /&* List initialization / LIST = *STRING-TO-VAR ( '(ABC,DEF,GHI,JKL,MNO,ABC,DEF,GHI,JKL,MNO)' ) / /&* List in reverse order / FOR I = *LIST(LIST) / TSIL = I, *PREFIX / END-FOR / /&* Show list variable in one command / SHOW-VARIABLE VARIABLE-NAME = ( LIST, TSIL ) / /&* Search variable A inside LIST and save the result in B / A = 'I' / IND = SEARCH-LIST-INDEX('LIST', '^&A.$', PATTERN-TYPE=*REGULAR-EXPRESSION) / IF ( IND <> 0 ) / B = LIST#IND / END-IF / /&* Get all files beginning with 'A' / EXECUTE-CMD CMD = (/SHOW-FILE-ATTRIBUTES A*) - / , STRUCTURE-OUTPUT = FS-OUT - / , TEXT-OUTPUT = *NONE / /&* Put contents in a container / C-FS-L = FS-OUT / /&* Calculate total size / TSIZE = 0 / FOR I = *COUNTER( 1, SIZE('FS-OUT'), 1 ) / TSIZE = TSIZE + FS-OUT#I.F-SIZE / END-FOR / /&* Save container ( close implicit at procedure end ) / SAVE-VARIABLE-CONTAINER CONTAINER-NAME = CONTFS / /&* Display date, time and total file size / WRITE-TEXT - / 'Today &(DATE()) at &(TIME()) we have a total file size of &TSIZE - / on user-id &(USER-ID())..' / /EXIT-PROCEDURE
Ausgangsprozedur (weniger empfohlene Schreibweise):
/SET-PROC-OPT / /OP-VAR-CONT CONTFS, *L(BAD.LIB) /DECL-VAR C-FS-L,TYP=STRUCT,MULT=*L,CONT=CONTFS / /REMARK This list variable / DECL-VAR LIST ( TYP = STRI ),MULT=*L / /REMARK Its initialization / SET-VAR LIST ='ABC', *EXTEND; SET-VAR LIST ='DEF', *EXTEND / SET-VAR LIST ='GHI', *EXTEND; SET-VAR LIST ='JKL', *EXTEND / SET-VAR LIST ='MNO', *EXTEND; SET-VAR LIST ='ABC', *EXTEND / SET-VAR LIST ='DEF', *EXTEND; SET-VAR LIST ='GHI', *EXTEND / SET-VAR LIST ='JKL', *EXTEND; SET-VAR LIST ='MNO', *EXTEND / /REMARK List in reverse order / DECL-VAR TSIL (TYP=STRI), MULT=*L / / FOR I = *C( SIZE('LIST'), 1, -1) / SET-VAR TSIL#&(SIZE('LIST') - I + 1) = LIST#&I / END-F / /REMARK Show list variable / SH-VAR LIST / SH-VAR TSIL / /REMARK Search variable A inside LIST / SET-VAR A = 'I' / SET-VAR FOUND = FALSE / FOR I=*C(1,SIZE('LIST'),1), COND=(NOT FOUND) / IF ( LIST#&I == A ) / SET-VAR FOUND = TRUE / EN-IF / END-F / /REMARK Save it in B / IF ( FOUND ) / SET-VAR B = LIST#&I / EN-IF / /REMARK Get all file beginning with 'A' / DECL-V FS-OUT ,TYP=STRU,MULT=*L / EXEC-CMD (/SH-FIL-ATTR A*),STR-OUTPUT=FS-OUT,TEXT-OUT=*NONE / /REMARK Calculate total size and put contents in a container / SET-VAR TSIZE = 0 / FOR I=*C(1,SIZE('FS-OUT'),1) / SET-VAR TSIZE = TSIZE + FS-OUT#&I..F-SIZE / SET-VAR C-FS-L#&I = FS-OUT#&I / END-F / /REMARK Save the container / SAVE-VAR-CONT CONTFS / /REMARK Close the container / CLOSE-VAR-C CONTFS / /REMARK Display date, time and total file size / TDATE = DATE / TTIME = TIME / /W-T 'Today (&TDATE) at &TTIME we have a total file size of &TSIZE - / on user-id &USER-ID..' / /EXIT-PROC