안녕하세요.
프로그램 수정하다 궁금한게 있어서 글 올립니다.
기존의 프로그램에서 perform 문을 사용하지 않게 되어서
<기존프로그램>
...
...
perform P.
...
...
form P.
...
endform.
<변경된 프로그램>
...
...
* perform P. <- 요기만 코멘트 처리 했습니다.
...
...
form P.
...
endform.
저렇게 perform문을 호출하는 곳만 코멘트 처리하면 sap이 perform P의 내용을 포함해서 activate하게 되나요?
아니면 호출하지 않으니 빼고 activate 하게 되나요?
댓글 3
-
e-abap
2008.12.11 04:36
빼고 activate 하게 됩니다~ -
십년만에
2008.12.11 17:26
답변 고맙습니다.
activate를 하면서 syntax check를 하면 Perform이 있는 문장만 체크를 하는 것이 아니라, 현재의 프로그램의 소스코드(Include 포함) 전체를 syntax check를 하는 것으로 알고 있습니다.
그러면 syntax check와 activate 되는 것은 또 다른 문제인가요?
만일 <기존 프로그램>이 시스템 상에서 차지하는 resource를 100이라 보았을 때, perform P가 실행될 때 차지하는 resource가 50이라면
perform P를 코멘트 처리 하면 <변경된 프로그램>이 차지하게 되는 resource는 50이 되는 것인가요?
-
e-abap
2008.12.11 17:47
리소스랑 perform 구문은 별개의 문제 인거 같은데요,.
프로그램이 실행되면, INCLUDE 안에 포함된 소스가 메모리에 로드가 되죠.
그러나 PERFORM 구문이 실행된 경우를 계산해서 리소스를 잡아 먹는게 아니라, PERFORM 구문이 실행될때 메모리를 차지 하기 때문에
리소스가 그렇게 확 줄지 않습니다.
메모리 용량은 단지 소스 FORM ~ ENDFORM 구문의 소스 길이(1문자 = 1BYTE) 용량만큼만 잡아먹겠죠.
PERFROM 구문고 FORM~ENDFORM은
변수를 선언하고, 프로그램 내에서 변수를 사용하지 않는 문제와는 다릅니다.
프로그램내에 변수를 선언하였을때 개별 타입에 따라 C타입은 1BYTE(유니코드등에 따라 다름)등으로 이미 메모리 공간을 차지 하겠죠.
즉, 변수에 값을 할당하지 않더라도 이미 변수를 선언한 것만으로 메모리는 사용되고 있습니다.
(이것도 물론 인터널 테이블은 동적으로 메모리를 할당할 수 있기 때문에 더 많은 이야기가 추가됩니다.)
마지막으로, PERFORM구문의 비활성화시 메모리 확인은 실제 모니터링 해보지 않고, 유추한 내용임으로 정확한 내용은 아닙니다.