Performanceanalyse Loop itab where .. from i to j
Aus SAP-Wiki
(Weitergeleitet von Loop itab where .. from i to j)
Zur Navigation springenZur Suche springen
Bei einem Loop über eine interne Tabelle sollte die Where-Bedingung genutzt werden, anstatt im Rumpf der Loop-Schleife eine Check oder If- Bedingung zu implementieren. Es findet weniger Datentransport statt, das Coding ist kürzer und es ist performanter.
Nach Möglichkeit sollte auch der Tabellebereich "from i to j" genutzt werden, wenn man weiß in welchem Bereich der Tabelle das Ergebnis zu finden ist.
Beispiel mit einer STANDARD TABLE (Mit einer SORTED TABLE ist der Zusatz FROM/ TO kaum notwendig):
Coding
REPORT. *** Auswahl LOOP-Variante PARAMETER p TYPE c LENGTH 1 DEFAULT '1'. TYPES: BEGIN OF ty_struc, index TYPE i, field TYPE c LENGTH 10, END OF ty_struc. DATA ls_struc TYPE ty_struc. DATA ls_stru2 TYPE ty_struc. DATA lt_itab TYPE STANDARD TABLE OF ty_struc.. DATA i TYPE i. DATA j TYPE i. DATA start TYPE i. DATA stopp TYPE i. START-OF-SELECTION. *** Generierung Testdaten DO 5000 TIMES. ls_struc-index = sy-index. CALL FUNCTION 'QF05_RANDOM_INTEGER' EXPORTING ran_int_max = 9 ran_int_min = 1 IMPORTING ran_int = i. DO i TIMES. CALL FUNCTION 'QF05_RANDOM_INTEGER' EXPORTING ran_int_max = 15 ran_int_min = 1 IMPORTING ran_int = j. ls_struc-field = sy-abcde+j(10). INSERT ls_struc INTO TABLE lt_itab. ENDDO. ENDDO. GET RUN TIME FIELD start. CASE p. WHEN '1'. *** Variante 1: Normaler geschachtelter LOOP LOOP AT lt_itab INTO ls_struc. IF ls_stru2-index <> ls_struc-index. ls_stru2 = ls_struc. WRITE: / ls_struc-index COLOR COL_GROUP. LOOP AT lt_itab INTO ls_stru2 WHERE index = ls_struc-index. WRITE: AT /4 ls_stru2-field. ENDLOOP. ENDIF. ENDLOOP. WHEN '2'. *** Variante 2: LOOP mit Index LOOP AT lt_itab INTO ls_struc. IF ls_stru2-index <> ls_struc-index. i = sy-tabix. ls_stru2 = ls_struc. WRITE: / ls_struc-index COLOR COL_GROUP. LOOP AT lt_itab INTO ls_stru2 FROM i WHERE index = ls_struc-index. WRITE: AT /4 ls_stru2-field. ENDLOOP. ENDIF. ENDLOOP. ENDCASE. GET RUN TIME FIELD stopp. stopp = stopp - start. MESSAGE s000(oo) WITH stopp 'ms'.
Ausgabe
1 DEFGHIJKLM JKLMNOPQRS 2 BCDEFGHIJK FGHIJKLMNO BCDEFGHIJK OPQRSTUVWX OPQRSTUVWX KLMNOPQRST MNOPQRSTUV 3 NOPQRSTUVW HIJKLMNOPQ OPQRSTUVWX 4 HIJKLMNOPQ HIJKLMNOPQ LMNOPQRSTU 5 HIJKLMNOPQ CDEFGHIJKL LMNOPQRSTU NOPQRSTUVW CDEFGHIJKL FGHIJKLMNO BCDEFGHIJK OPQRSTUVWX ... ... ...
Laufzeit Variante 1: ca. 6 Sek.
Laufzeit Variante 2: ca. 3 sek.
www.sapdatasheet.org
Wie bei vielen Entwicklungsobjekten umfasst www.sapdatasheet.org auch alle Funktionsbausteine und Funktionsgruppen