본 자료는
1. 프로그램 메모리 부족 원인 및 에러 현상
2. 메모리 부족 확인 방법
3. 결론 및 해결 방법
순서로 진행합니다.
IEC-Series 모델 별로 물리적인 메모리 용량이 정해져 있습니다. 일반적인 PC처럼 메모리(RAM)를 확장하거나 교체할 수 없으므로 프로그램 규모에 따라 제품의 선정을 고려하셔야 합니다. 사용자 인터페이스의 완성도를 높이기 위한 이미지 사용이 프로그램 메모리의 사용량을 증가시키는 주요 원인으로 이러한 상황을 고려하여 상위 제품군을 선정할 것을 권장합니다. IEC-Series에서 프로그램이 안정적으로 실행되기 위해서 프로그램이 실행된 상태에서 최소 20~ 30%대의 가용 메모리가 필요합니다. 만약 메모리가 부족한 경우 Not Supported Exception, Null Reference Exception, OutOfMemory, 응용 프로그램.exe 오류, 프로그램 동작 중 프로그램 멈춤 등의 다양한 에러가 랜덤하게 발생할 수 있습니다.
-
에러 현상 1
응용 프로그램.exe 오류 -
에러 현상 2
Reference Exception -
에러 현상 3
OutOfMemoryException
※ Core-Standard 기준
IEC667-Series | IEC1000-Series | |
---|---|---|
H/W에서 제공되는 RAM 용량 | 256MB | 512MB |
프로그램 메모리(Application 실 사용량) | 172MB | 336MB |
IEC667 Series |
IEC1000 Series |
|
---|---|---|
H/W에서 지원되는 RAM 용량 |
256MB | 512MB |
프로그램 메모리 (Application 실 사용량) |
172MB | 336MB |
개발된 프로그램의 동작 중 사용되는 프로그램 메모리의 크기를 모니터링하기 위해서는 오랜 시간 확인하셔야 정확한 사용량을 확인하실 수 있으며 가장 중요한 것은 모든 기능을 실행하시면서
프로그램 메모리의 사용량을 모니터링하시기 바랍니다. 모니터링 시 메모리 누수(Memory Leak)도 함께 확인하시기를 권장합니다.
메모리의 사용량을 실시간으로 SmartMemory를 통하여 모니터링 확인 가능합니다.
-
[SmartMemory 적용 프로그램]
-
[확대화면]
※ 상단의 [Program-RAM]의 Free 영역의 메모리 가용 퍼센트(%)가 시간이 지나도 일정한 수준으로 유지 하는지 특정 시간 간격으로 체크 하시면 됩니다.
Ex) 30분마다 체크 시 Free 메모리가 20~30%대 유지
프로그램의 가용 메모리를 측정하는 소스 코드에 추가하는 방법은 아래와 같습니다.
-
[STEP-1] Visual Studio의 도구상자에서 SmartMemory를 폼 디자인으로 추가합니다.
-
[STEP-2] 폼 디자인에서 Form1을 선택하고 속성에서 Load를 클릭하여 Form1_Load 이벤트를 생성합니다. Form1_Load 이벤트에 아래와 같이 소스 코드를 입력 바랍니다.
개발언어 | 적용방법 |
---|---|
C# |
// C# 또는 VB.NET 기준 Form1_Load 부분에 다음의 소스 코드를 삽입합니다. private void Form1_Load(object sender, EventArgs e) {
// 현재 시스템 메모리 정보를 모니터링
}
smartMemory1.MemoryStatusInfomationShow(); |
VB.NET |
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
SmartMemory1.MemoryStatusInfomationShow()
End Sub
|
3. 결론 및 해결 방법
만약 프로그램 메모리의 확인 결과 가용 메모리가 20~30% 이하로 유지되는 경우 선정한 모델에 비해 사용 프로그램의 사이즈가 너무 크지 않는지 확인 바랍니다. 이 경우에는 프로그램의 원활한 동작을 위해 프로그램 사이즈에 맞는 상위 모델 사용을 권장합니다. 만약 메모리가 지속적으로 감소(메모리 Leak 현상)가 발생하는 경우에는 프로그램 내부의 소스에서 메모리 손실이 발생될 만한 부분이 없는지 확인이 필요합니다. (Ex) 스레드 시작 후 정상 종료 안 함 등 실행 프로그램에서 다양한 기능 별로 메모리 사용이 다르므로 최소 하루 이상(장시간)동안 다양한 동작을 해보면서 메모리 테스트가 필요합니다.
-
[STEP-1] 가용 메모리 모니터링
→ SmartMemory 기능으로 가용 메모리가 20% 이상 확보되고 있는지 오랜 시간 모니터링 필요
- [STEP-2] 프로그램 메모리 최적화
불필요한 메모리를 절약할 수 있는 방식으로 프로그램 개선
→ 사용자 인터페이스 이미지 최소 사용
→ 객체의 생성은 사용 시 동적으로 사용(폼도 동적으로 할당 및 사용 속도는 느려짐)
-
[STEP-3] 메모리 누수 확인
→ SmartMemory 기능으로 가용 메모리가 시간이 지나면서 또는 기능이 실행될 때 계속해서 감소하는지 모니터링 필요
-
[STEP-4] 상위 제품으로 변경
→ 모든 STEP을 진행했을 때도 프로그램 가용량이 20% 넘지 못하면 상위 제품으로 변경을 권장합니다.
(※ IEC1000-Series의 경우 최상위 모델)