런타임 중에 올바르게 릴리스되지 않은 메모리를 식별하는 가장 좋은 방법은 무엇입니까? 응용 프로그램이 닫힐 때 할당되지 않은 (누수 된) 메모리를 식별하는 여러 프로그램을 알고 있습니다. 하지만 내 문제는 프로그램 실행 중에 (아마도 스레드) 시스템이 "작업"으로 완료된 후에도 해제되지 않은 일부 개체가 생성되는 것 같습니다.런타임 중에 릴리스되지 않은 메모리 식별
시스템을 계속 실행하면 시간이 지남에 따라 커집니다. 그러나 프로그램이 종료 될 때 메모리가 올바르게 해제 된 것처럼 보이고 그 순간에 내가 사용하는 MadExcept에서 누수로보고되지 않습니다.
"작업"이 실행될 때마다이 메모리를 할당하고 프로그램이 종료 될 때까지 메모리를 해제하지 않는 것이 가장 좋은 방법은 무엇입니까? 이것은 약 1 백만 줄의 코드, 여러 DLL 하위 프로젝트 및 여러 스레드 실행 (40-50)이있는 상당히 큰 서버 시스템에 있습니다.
아마도 X 분 이상 동안 살아있는 할당 된 개체를 식별 할 수있는 시스템이있을 수 있습니다. 60 분이 선택되고 시스템이 실행 중이라고 가정 해 봅시다. 그런 다음이 정보를 사용하여이 긴 생명체를 찾아 내서 조사 할 수 있습니다.
누출 감지기 모드에서 [Boehm 's GC] (http://www.hboehm.info/gc/)를 사용할 수 있습니다. –
나는 프로그래머가 고려해야 만했던 것을 고려한 보조 프로그램이 있다고 생각하지 않는다. 메모리에 액세스 할 수있는 한 객체를 삭제해야한다고 추측 할 수는 없습니다. – 101010
40two : 문제가 있음을 이해합니다. 내가 이것을 처음부터 만들었다면 아마 그 원인을 알 수 있었을 것이다. 제가 생각한 것은 아마도 필터를 사용하여 60 분 이상 살아있는 모든 객체의 목록처럼 될 수있는 프로그램이 있다는 것입니다. 수명이 긴 동일한 유형의로드를 볼 수 있다면이를 조사 할 수 있습니다. – inquam