본 자료는
1. 이미지 사용 방식과 장단점
2. 이미지 사용 방식에 따른 각종 수치 비교
3. 예제 설명
3-1. 주요 구현 방법 설명
3-2. 주요 소스 코드
순서로 진행합니다.
이미지 사용 방식은 크게 리소스 이미지를 바로 호출하는 방식과 리소스 이미지를 인스턴스화하여 사용하는 방식 두 가지로 나눌 수 있습니다. 이 두 방식은 사용 용도에 따라 출력 속도, 가용 메모리, 부팅 속도 등에 영향을 줄 수 있으며 상세 내용은 아래 표와 같습니다.
항목 | [CASE-1] 리소스 이미지를 바로 사용 |
[CASE-2] 리소스 이미지를 SmartPictureBox의 ImageList에 추가하여 사용 |
---|---|---|
설명 | 이미지를 출력할 때마다 리소스의 이미지를 호출하여 사용하는 방식 |
리소스의 이미지를 SmartPictureBox의 ImageList 에 추가하여 컬렉션 형태로 사용하는 방식 |
장점 | 상시 가용 메모리가 늘어난다. | 이미지 출력 속도가 빠르다. |
단점 | 이미지 출력 속도가 느리다. | 상시 가용 메모리가 줄어든다. |
2. 이미지 사용 방식에 따른 각종 수치 비교
아래 표는 첨부한 예제를 IEC1000-Series에 저장하고 런타임 모드로 실행했을 때 측정한 결과이며, 측정 항목과 설명은 다음과 같습니다.
- 상시 가용 메모리 : 리소스 이미지를 ImageList에 추가하여 사용할 때는 RAM에 저장하여 사용하므로 리소스 이미지를 바로 사용할 때보다 가용 메모리가 더 적습니다.
- 부팅 시간 : IEC1000-Series 기준으로 예제를 런타임 모드로 실행했을 때 폼이 완전히 로드될 때까지의 시간입니다.
- 실 사용 가능 시간 : 리소스 이미지를 바로 사용하는 경우 리소스 이미지를 인스턴싱할 필요가 없으므로 부팅 후 프로그램을 바로 사용할 수 있지만, 리소스 이미지를 ImageList에 추가하는 경우 시간이 추가로 소요됩니다.
본 예제에서는 800*290 사이즈의 Bitmap 이미지 10개 총 6.63MB 크기의 이미지들을 폼 로드 전 OnFormLoadCompleting 이벤트에서 일괄로 ImageList에 추가합니다.
- 반복 출력 횟수별 소요 시간 : 여러 이미지를 일정 횟수만큼 반복적으로 출력할 때 소요 시간을 방식별로 측정한 결과입니다.
- 버튼 개수별 이미지 변경 소요 시간 : 일정 개수의 SmartButton.ImageUp을 특정 이미지로 일괄 변경할 때 소요 시간을 방식별로 측정한 결과입니다.
항목 | [CASE-1] 리소스 이미지를 바로 사용 | [CASE-2] 리소스 이미지를 ImageList에 추가하여 사용 | |
---|---|---|---|
상시 가용 메모리 | 95.52% | 91.68% | |
부팅 시간(폼 로드 시간) | 12.26초 | 12.32초 | |
실 사용 가능 시간 | 바로 사용 가능 | 폼 로드 후 1.83초 | |
반복 출력 횟수별 |
500회 | 10.81초 | 2.73초 |
1000회 | 22.36초 | 5.45초 | |
2000회 | 45.04초 | 10.89초 | |
버튼 개수별 이미지 변경 소요 시간 |
28개 | 0.146 ~ 0.249초 | 0.027초 |
56개 | 0.292 ~ 0.4856 | 0.055초 | |
84개 | 0.435 ~ 0.668초 | 0.086초 |
3. 예제 설명 3-1. 주요 구현 방법 설명
리소스는 배포될 때 실행 파일(exe 파일)안에 저장되어 배포됩니다. 프로그램을 실행하고 리소스 파일에 접근하게 되면 RAM(Program Memory)에 접근하는 것이 아닌 실행 파일이 위치한 물리적인 저장소(Flash Disk, SD Card, USB)에 접근하여 리소스 파일을 불러오게 됩니다. 이 작업은 RAM에서 데이터를 불러오는 작업보다 처리 속도가 느리기 때문에 이미지 출력 속도가 느려지게 됩니다. 즉, 사용할 이미지를 RAM에 미리 할당하고(인스턴싱) 호출하게 되면 이미지 출력 속도를 크게 개선시킬 수 있습니다.