The INSPECT verb, as implemented by the IBM COBOL II compiler, can
be extremely CPU intensive which can cause programs to run far longer than
necessary. Surprisingly, simply changing the INSPECT … REPLACING to a
PERFORM … VARYING, which examines each byte and replaces it if necessary,
can make a significant improvement in performance.
There is an even better solution to this problem. There is a module, written in assembler language, that utilizes the old system 360 TR (translate) instruction to do the required data manipulation both efficiently and expediently. The module id is DR0139BA and it is located in the ‘NLAPPL.BATCH.LOADLIB’ PDS.
DR0139BA is called dynamically from a COBOL II program which passes the address of the object that requires examination, the length of that object, the character to look for, and the character to replace it with. The example code segments that follow show exactly how to define these parameters and how to pass them to the subroutine. Data Division ... 01 TEST-RECORD. 02 PIC X(20000) VALUE LOW-VALUES. 01 CALLED-MODULES. 02 DR0139BA PIC X(08) VALUE ‘DR0139BA’. 01 WORK-VARIABLES. 02 RECORD-LENGTH PIC S9(08) COMP VALUE 20000. 02 E-R-SET. 03 FROM-CHARACTER PIC X(01) VALUE LOW-VALUE. 03 TO-CHARACTER PIC X(01) VALUE SPACE. Procedure Division ... CALL DR0139BA USING TEST-RECORD RECORD-LENGTH E-R-SET. A test program was used to indicate the approximate improvement that can be expected when using these alternatives to the INSPECT verb. The test program used a 20000 byte record in working-storage, initialized to low values. The system clock was printed before and after each alternative was executed. The INSPECT verb was used to replace each low value by a space and then replace each space by a low value 1000 times. A PERFORM … VARYING loop was done to accomplish the same task 1000 times. Finally DR0139BA was called to do the same process 1000 times. The time required for the DR0139BA is slightly inflated because the test program also verified that the translation was correct by comparing the test record to two records in working storage that were initialized to low values and spaces respectively.
The elapsed times from this test are: INSPECT ................... 1 min 52.32 secs PERFORM VARYING ........... 0 min 24.22 secs (5x faster) DR0139BA .................. 0 min 00.82 secs (30x & 137x faster) The test program may be used to verify these results. The source program is ‘H308.SPF.SOURCE(TESTPGM)’ and the JCL is ‘H308.SPF.JCL(TESTPGM)’. Please note that results will vary based on the load on the system and any changes in the actual CPU, but the relative magnitudes of elapsed time will remain similar.