목록으로

Report 추출 속도 개선하기

Pml Example 2

추출속도 개선하기

32비트 프로그램이라 메모리 쉽게 터지기도하고 추출속도도 느립니다..그래서 최대한 개선방안 생각해보았습니다.

1. CE 최소화

  1. CE 를 사용한 매크로 예시
$* PipeList 안에는 Pipe 정보들이 들어가 있다고 가정
Do !pipe values !PipeList

$!pipe
!name = name
!type = !type

...

ENDDO

  1. 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 써서 비동기적으로 하면 틩깁니다