Loading...
Select Version
&pagelevel(3)&pagelevel
The following example shows a procedure to which all optimizations mentioned in the previous sections were applied. The optimized procedure (created by the “BS2000 Performance Controlling and Modelling” team) requires only 62% of the CPU time needed by the initial version of the procedure that was written using the lower performance syntax.
Optimized procedure (recommended syntax):
/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
Initial procedure (less recommended syntax):
/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