LOOP AT gt_main.
LOOP AT gt_siinfo WHERE gubun = gt_main-gubun
and ccode = gt_main-ccode.
gt_siinfo-co2 = gt_main-co2.
gt_siinfo-n2o = gt_main-n2o.
gt_siinfo-ch4 = gt_main-ch4.
gt_siinfo-hfc5 = gt_main-hfc5.
gt_siinfo-pfc5 = gt_main-pfc5.
gt_siinfo-sf6 = gt_main-sf6.
modify gt_siinfo.
ENDLOOP.
ENDLOOP.
코드를 이런식으로 짯는데요 이런 구문이 많으면 성능측면에서
비효율적인가요??
프로그램이 엄청 느려서 혹시 이런 구문이 많아서 그런게 아닌가 싶어서요..
고수님들 부탁드립니다~~
테라스님이 쓰신 덧글 퍼왔어요~ 참고해보세요~
중복LOOP문을 쓴 경우와 LOOP문과 binary search하는 read table 구문을 같이 쓰는 경우 속도차이를 보는 소스예요~
------------------------------------------------------------------------------------
아래 소스코드를 실행해 보시면 진현태 님께서 설명해주신 방법의 장점을 느끼실수 있습니다.
외부의 GT_BSEG는 100건 GT_BSEG2는 10,000건의 데이터가 있는 경우를 예로든 경우이며
약 10배 이상의 성능차이가 납니다.
DATA: GT_BSEG TYPE TABLE OF BSEG WITH HEADER LINE,
GT_BSEG2 TYPE TABLE OF BSEG WITH HEADER LINE,
GS_BSEG TYPE BSEG.
DATA: T1 TYPE I,
T2 TYPE I,
RT TYPE I.
DO 10000 TIMES.
GS_BSEG-BELNR = SY-INDEX MOD 100.
APPEND GS_BSEG TO GT_BSEG.
APPEND GS_BSEG TO GT_BSEG2.
ENDDO.
SORT GT_BSEG BY BELNR.
SORT GT_BSEG2 BY BELNR.
DELETE ADJACENT DUPLICATES FROM GT_BSEG COMPARING BELNR.
GET RUN TIME FIELD T1.
LOOP AT GT_BSEG.
LOOP AT GT_BSEG2 WHERE BELNR = GT_BSEG-BELNR.
ENDLOOP.
ENDLOOP.
GET RUN TIME FIELD T2.
RT = T2 - T1.
WRITE:/ RT.
GET RUN TIME FIELD T1.
LOOP AT GT_BSEG.
READ TABLE GT_BSEG2 TRANSPORTING NO FIELDS
WITH KEY BELNR = GT_BSEG-BELNR
BINARY SEARCH.
IF SY-SUBRC = 0.
LOOP AT GT_BSEG2 FROM SY-TABIX.
IF GT_BSEG-BELNR <> GT_BSEG2-BELNR.
EXIT.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
GET RUN TIME FIELD T2.
RT = T2 - T1.
WRITE:/ RT.