안녕하세요.
제가 제작한 ocx가 반복사용하면 ie를 잡아먹는다는 제보가 있어 메모리루수여부를 검사중입니다.
코드상에서 오브젝트들은 모두 로컬로만 create하고 자기 프로시져내에서 free한것을 확인했는데 이미지처리때문에 리용한 레코드배열이 눈에 거슬립니다.
TStrict = record
Size : TPoint;
strict : Integer;
end;
tstrict배열이 global에 하나있어서 destroy에서 setlength(ga, 0)해주고 로컬의 tstrict배열은 프로시져 마감에 setlength(la, 0);해줬는데요.
레코드배열은 따로 메모리를 프리해줘야하는가요?
memproof로 ocx를 테스트해보면 local heap에 루수가 납니다.
선배님들의 많은 조언 기대합니다.
보통 일반 배열은 setlength(la, 0)만 해도 메모리 릭을 제거 할 수 있지만, 오브젝트가 별도 생성해서 연결하는 경우, 예로 콤보 아이템에 오브젝트 연결등에서 별도로 만든 구조체 생성한걸 연결하면, 나중에 루프로 free하시는게 좋습니다.
그래서 구조체 자체에도 constructor Create;와 destructor Destroy;를 만드는 습관도 좋습니다.