Report 추출 속도 개선하기
Pml Example 2
추출속도 개선하기
32비트 프로그램이라 메모리 쉽게 터지기도하고 추출속도도 느립니다..그래서 최대한 개선방안 생각해보았습니다.
1. CE 최소화
- CE 를 사용한 매크로 예시
$* PipeList 안에는 Pipe 정보들이 들어가 있다고 가정
Do !pipe values !PipeList
$!pipe
!name = name
!type = !type
...
ENDDO- CE를 최소화한 매크로 예시
$* PipeList 안에는 Pipe 정보들이 들어가 있다고 가정
Do !pipe values !PipeList
!name = !pipe.name
!type = !pipe.type
...
ENDDO
즉 1번과 같이 할 경우 DO 문을 반복하는 동안 계속해서 !pipe 에 이동하기 떄문에 속도가 느려집니다
2. 쪼개서 추출하기
프로젝트 전체 단위에서 Bran 데이터를 한번에 추출하려고 하면 대부분 너무 많기 떄문에 추출하는데 오랜 시간이 걸리거나 데이터를 추출하다가 틩길 수 있습니다.
!branList = !!collectAllFor (|BRAN|, ||, Worl)테스트 프로젝트처럼 규모가 매우 작을경우 위 처럼 하는게 제일 빠를수도 있겠지만
규모가 커지면 커질수록 적당히 나눠서 추출하는게 가장 빠릅니다.
예를들면
!siteList = !!collectAllFor (|Site|, ||, Worl)
Do !site Values !siteList
!branList = !!collectAllFor (|BRAN|, ||, !site)
$* 이부분에서 bran 가공
ENDDO
Site 단위에서 쪼개도 너무 많다 싶으면
SITE > PIPE > BRAN 요런식으로요
3. 추출방식… 변경
당연한 거지만
E3D Model 내에서 추출하는 것 보다 TTY 가 더 빠르고 TTY보단 Standalone으로 하는게 더 빠릅니다.
4. Object Table 혹은 Object Block 이용하기
복잡하게 가공할 일이 없을경우 아래 방식을 이용하는게 조금 더 빠릅니다.
5. 확장자 없애기
텍스트 파일로 추출할때 읽고쓰는게 report.txt 이렇게 하는것보다 그냥 report 이렇게 확장자 없는게 더 빠릅니다
6. 섞어서 쓰기
전 개인적으로 나눠서 데이터를 추출하긴 했는데
작게 작게 여러개의 파일로 데이터를 나눠서 추출하고
추출한 데이터는 C#으로 합치던 아니면 엑셀의 파워쿼리를 이용해서 합치던 했습니다.
7. 병렬실행
E3D 자체를 그냥 여러개 켜서 추출하면 됩니다 구역 나눠서
C#에서 awiat 써서 비동기적으로 하면 틩깁니다