Laufzeit-Optimierungen für Cobol-Programme

lfd.Nr.Erläuterung / Beispiel
1.Leerzeilen in Sourcen sollten kommentarisiert werden, da anderenfalls vom Compiler jeweils die gesamte Zeile geprüft werden muss.
2.Ein 1-stelliger Schalter "PIC X" ist schneller als ein numerischer Schalter "PIC 9":
05 S-STATUS-ABC PIC X(01) VALUE SPACE.
88 S-STATUS-ABC-OK VALUE 'J'.
88 S-STATUS-ABC-FALSCH VALUE 'F'.

SET S-STATUS-ABC-OK TO TRUE.
3.Durch Verwendung von 88er-Stufen wird die Laufzeit verringert.
4.Rechenfelder sollten immer mit einer Vorzeichenstelle definiert werden:
01 WORK-STRUKTUREN.
05 WERT-1 PIC S9(11)V99 VALUE ZERO.
5.Statt COMP sollte nur noch BINARY und
statt COMP-3 sollte nur noch PACKED-DECIMAL verwendet werden:
01 WERT-MIN PIC S9(03) BINARY VALUE 31.
01 WERT-ABC PIC S9(13)V99 PACKED-DECIMAL SYNC VALUE ZERO.
6.Die Verwendung von PACKED DECIMAL (COMP-3) -Variablen mit einer ungeraden Stellenanzahl ist ca. 5 - 20% schneller als bei einer geraden Stellenanzahl.
7.Zur Vermeidung von Verschiebe-Operationen beim Zugriff auf Variablen sollten binäre Felder mit SYNC auf Halb- oder Doppelwort-Grenze ausgerichtet werden, auch wenn sich dadurch der Speicherbedarf erhöht. Definitionen auf der 01-Stufe sind automatisch auf die Doppelwort-Grenze ausgerichtet.
01 TAB-01 OCCURS 10000 INDEXED BY IND-TAB-01.
05 TAB-01-WERTE OCCURS 100 INDEXED BY IND-TAB-01-WERTE.
10 TAB-01-W01 PIC S9(03)V99 SYNC VALUE ZERO.
10 TAB-01-W02 PIC S9(13)V99 SYNC VALUE ZERO.
8.Als FILLER definierte Felder werden bei einem INITIALIZE nicht initialisiert.
9.Strukturen mit verschiedenen Datentypen werden am besten wie folgt initialisiert:
INTIALIZE WS-RECORD
REPLACING
ALPHANUMERIC DATA BY SPACES
NUMERIC DATA BY ZEROES.
10.Bei arithmetischen Anweisungen sollten die Definitionen der verwendeten Variablen äquivalent sein, da anderenfalls Konvertierungen erforderlich sind.
11.Mehrere einzelne Anweisungen sollten besser zu einer einzigen COMPUTE-Anweisung zusammen gefasst werden.
12.DIVIDE sollte möglichst durch ein MULTIPLY ersetzt werden, da MULTIPLY nur ca. ein Drittel der Laufzeit eines DIVIDE benötigt.
DIVIDE 5,0 INTO WERT-A.
MULTIPLY 0,2 BY WERT-A.
13.Statt einer Multiplikation oder Division mit einer 10er-Potenz kann stattdessen die per REDEFINE definierte Variable verwendet werden.
01 DIV-UND-MULT-WERTE.
05 WERT-A PIC S9(4)V9 PACKED-DECIMAL.
05 WERT-D REDEFINES WERT-A.
10 WERT-DIVIDIERT PIC S9(3)V99 PACKED-DECIMAL.
05 WERT-M REDEFINES WERT-A.
10 WERT-MULTIPLIZIERT PIC S9(5) PACKED-DECIMAL.
14.Operationen werden schneller ausgeführt, wenn die Variablen zumindest in der Definition der Dezimalstellen übereinstimmen.
15.Bei einem EVALUATE sollte der am häufigsten auftretende Fall immer zuerst definiert werden und der OTHER-Zweig immer vorhanden sein:
EVALUATE WERT-ABC
WHEN 10 MOVE 101 TO WERT-B
WHEN 20 MOVE 121 TO WERT-B
WHEN 30 MOVE 301 TO WERT-B
WHEN OTHER
MOVE ZERO TO WERT-B
END-EVALUATE
16.Ein INLINE-Perform wird schneller ausgeführt als ein Aufrufen einer Section:
PERFORM VARYING COUNT-A FROM 1 BY 1
UNTIL COUNT-A>1000
COMPUTE WERT-A(COUNT-A) = WERT-B(COUNT-A) * WERT-C(COUNT-A)
END-PERFORM
17.Für Variablen, die in einer LOOP-Steuerung verwendet werden, sollten vom Typ BINARY sein
01 ZAEHLER PIC S9(05) BINARY VALUE ZERO.
PERFORM VARYING ZAEHLER FROM 1 BY 1
UNTIL S-STOP
...
END-PERFORM
18.Konstante Werte, die in Berechnungen innerhalb von LOOP-Schleifen verwendet werden, sollten außerhalb der LOOP-Schleife angeordnet werden:
01 KONST-WERT PIC S9(05) BINARY VALUE 12345.
PERFORM VARYING ZAEHLER FROM 1 BY 1
UNTIL S-STOP
COMPUTE WERT-A = WERT-A + WERT-B (ZAEHLER) * KONST-WERT
...
END-PERFORM
COMPUTE WERT-A = WERT-A * KONST-WERT.
19.Indizies für Tabellen sollten immer gepackt und nicht zu klein definiert werden.
20.Das wiederholte Ausführen eines INITIALIZE bei einer Tabelle ist langsamer als das einmalige INITIALIZE einer gleichartig strukturierten Variable auf 01-Stufe, die nach dem INITIALIZE per MOVE über die einzelnen Sätze der Tabelle geschrieben werden.
01 STRUK-A.
05 W1 ...
05 W2 ...
INITIALIZE STRUK-A
PERFORM VARYING IND-STRUK-B FROM 1 BY 1
UNTIL S-STOP
MOVE STRUK-A TO STRUK-B (IND-STRUK-B)
...
END-PERFORM
21.Der Laufzeitbedarf beim Durchsuchen von Tabellen, beginnend mit der höchsten Laufzeit:
  • Hochzählen des Subscripts incl. einer Ende-Abfrage
  • PERFORM VARYING mit einem Subscript
  • PERFORM VARYING mit einem INDEX
  • SEARCH
  • SEARCH ALL
22.Bei Tabellen mit weniger als 50 Einträgen sollte ein SEARCH (Sequentiell Search) verwendet werden, anderenfalls ein SEARCH ALL (Binary Search).
23.Bei Tabellen mit ca. 20 Einträgen ist ein in-line-PERFORM schneller als ein SEARCH.
24.Beim Zugriff auf Tabellen sollte immer ein Index statt eines Subscripts verwendet werden, da dieser bereits die Verschiebung zum Startpunkt der Tabelle enthält und sie somit nicht bei jedem Tabellenzugriff erneut berechnet werden muss.
Die Verwendung von COMP-Variablen für den Tabellenzugriff ist ca. 50-mal langsamer als ein Zugriff per Index. Bei Verwendung von COMP-3 -Variablen ist der Zugriff ca. 400-mal langsamer und bei Verwendung von DISPLAY-Variablen ca. 600-mal.
25.Auch wenn eine Datei im Programm mehrfach geöffnet wird, so sollte der OPEN-Befehl nur an einer Stelle geschrieben werden.
26.OPEN-Befehle für mehrere Dateien sollten zusammengefasst und dabei die I/O-Dateien zuerst genannt werden.
OPEN
I-O
STAMM
LIEFERUNG
OUTPUT
OUT-1
INPUT
DAT-1
DAT-2.
Bookmark:
 
Hinweise zur Suche:
  • Es kann nach einem ganzen Wort oder Wortteil gesucht werden.
  • Klein- und Großbuchstaben werden nicht unterschieden.
  • Platzhalter (Wildcards) sind nicht erforderlich. Mit der Eingabe von "date" werden z.B. "Daten", "Zugangsdaten" und "Update" gefunden.
  • Mehrere Suchbegriffe können durch ein Leerzeichen getrennt werden. Es werden dann alle Stellen gefunden, an denen mindestens einer der Suchbegriffe vorkommt.
  • Zwischen mehreren Suchbegriffen kann auch in Großbuchstaben das Wort AND stehen.
    Es werden dann nur die Stellen gefunden, an denen alle Suchbegriffe zugleich vorkommen.
Bernd Köppen
mail (at) fit-for-bit.de
030 - 47 20 343
Such-Maschine
MetaGer
aufrufen
Linksammlung
„Interessantes“
aufrufen
Einheiten-
Konverter
aufrufen
Liste Web-

sicherer Farben

aufrufen
VNC-Programm

für
PC-Fernwartung
Bernd Köppen
www.fit-for-bit.de