|
메모리가 지속적으로 올라가는 현상때문에
어느 부분에서 메모리가 올라가는지 확인하기위해
TMemoryStatus를 이용하여 메모리값을 체크해보았습니다.
함수를 호출하기 전/후에 메모리값을 체크해보았는데
총메모리값(dwTotalPhys)은 변하지 않으나
사용 메모리값은 오르락 내리락 하는 현상을 보입니다.
하물며, 단순히 함수를 호출하기 전 후에도 메모리가 증가하는 현상이 나타납니다.
예를 들어
A()
{
unsigned long used=0;
memfo.dwLength = sizeof(memfo);
GlobalMemoryStatus(&memfo);
g_WLog->Write("총 메모리크기 = (%d) \n", memfo.dwTotalPhys);
used = memfo.dwTotalPhys/1024 - memfo.dwAvailPhys/1024;
g_WLog->Write("사용 메모리크기 = (%d) \n", used); //<-----------------함수 호출전
B();
}
B()
{
unsigned long used=0;
memfo.dwLength = sizeof(memfo);
GlobalMemoryStatus(&memfo);
g_WLog->Write("총 메모리크기 = (%d) \n", memfo.dwTotalPhys);
used = memfo.dwTotalPhys/1024 - memfo.dwAvailPhys/1024;
g_WLog->Write("사용 메모리크기 = (%d) \n", used); //<-----------------단순 호출(처리부 이전)
RETURN;
}
함수 호출전과 단순 호출(처리부 이전)과 사용 메모리 크기가 차이가 납니다. 증가!!!!!
제 생각에는 아무 변화가 없어야 할것 같은데 말입니다.
또하나 이상한 점은
프로그램 내에서 체크한 메모리는 들쭉날쭉 하긴 해도 지속적으로 증가하는 추세는 아닙니다만
시스템관리자에서 볼수 있는 메모리값을 체크해보면 지속적으로
메모리가 상승합니다....이런...--;;
체크를 해봐야 하는 메모리값이 총메모리값이 아니고
사용메모리 값인가요????
이와 같은 방법으로 메모리 체크를 하는 것이 맞는지 궁금합니다.
참고로 사용메모리값은 총 메모리값과 availphys를 가지고 제가 산출한 값입니다.
아래는 생성자와 소멸자에서만 일단 메모리를 체크한 부분입니다.
__fastcall TCTRMsgMaker::TCTRMsgMaker(TComponent *Owner)
{
memfo.dwLength = sizeof(memfo);
GlobalMemoryStatus(&memfo);
g_WLog->Write("*TCTRMsgMaker생성자 시작*\n");
unsigned long used=0;
g_WLog->Write("총 메모리크기 = (%d) \n", memfo.dwTotalPhys);
used = memfo.dwTotalPhys/1024 - memfo.dwAvailPhys/1024;
g_WLog->Write("사용 메모리크기 = (%d) \n", used);
lstImage = new TList;
GlobalMemoryStatus(&memfo);
g_WLog->Write("*TList new 이후*\n");
used=0;
g_WLog->Write("총 메모리크기 = (%d) \n", memfo.dwTotalPhys);
used = memfo.dwTotalPhys/1024 - memfo.dwAvailPhys/1024;
g_WLog->Write("사용 메모리크기 = (%d) \n", used);
}
__fastcall TCTRMsgMaker::~TCTRMsgMaker()
{
for (int i = 0; i < lstImage->Count; i++)
{
Graphics::TBitmap *bitmap;
bitmap = (Graphics::TBitmap *)lstImage->Items[i];
free(bitmap);
}
if(lstImage) delete lstImage;
GlobalMemoryStatus(&memfo);
g_WLog->Write("*TList delete 이후*\n");
used=0;
g_WLog->Write("총 메모리크기 = (%d) \n", memfo.dwTotalPhys);
used = memfo.dwTotalPhys/1024 - memfo.dwAvailPhys/1024;
g_WLog->Write("사용 메모리크기 = (%d) \n", used);
}
그 결과는 이렇습니다.
[22:03:23:562] [PID:120100] Warning정보를 기록합니다.
[22:03:23:671] *TCTRMsgMaker생성자 시작*
[22:03:23:671] 총 메모리크기 = (534822912)
[22:03:23:687] 사용 메모리크기 = (333184)
[22:03:25:000] *CFDBAccess Dup 이후*
[22:03:25:000] 총 메모리크기 = (534822912)
[22:03:25:000] 사용 메모리크기 = (332752)
[22:03:25:015] *TList new 이후*
[22:03:25:015] 총 메모리크기 = (534822912)
[22:03:25:015] 사용 메모리크기 = (332760)
[22:03:25:015] *aLcsCommInfo memset 이후*
[22:03:25:015] 총 메모리크기 = (534822912)
[22:03:25:015] 사용 메모리크기 = (332596)
[22:06:54:750] *CFDBAccess delete 이후*
[22:06:54:750] 총 메모리크기 = (534822912)
[22:06:54:750] 사용 메모리크기 = (331048)
[22:06:54:750] *TList delete 이후*
[22:06:54:781] 총 메모리크기 = (534822912)
[22:06:54:796] 사용 메모리크기 = (331076)
[22:06:54:796] [PID:120100] Warning정보 기록을 종료합니다.
총 메모리값은 일정하지만, 사용메모리값은 들쭉날쭉...
|