Unity3d C# toolba 사용해보기

델파이를 이용하여 모달리스폼의 메모리해제하기



안녕하세요 메르세데스입니다.


이번시간에 알아볼 것은 dll폼의 메모리 관리입니다. 메모리 관리는 개발자에게 정말 중요한 일이죠

dll


제가 델파이를 사용하다 보니 델파이에 관련한 내용이 될 수 밖에 없는데요..


모달(modal)폼의경우 메모리관리가 쉬운 편입니다. 이 폼이 떠있으면 다른 게 실행이 안되기 때문에 종료로직에 아래와 같은 것을 넣어주면 됩니다.




폼의....onFormClose 이벤트...
begin

Action := Cafree;

end 




그냥 한 줄을 넣어주면 해제가 됩니다.



하지만 show로 생성한 폼의경우 위의 예처럼 하면 메모리 해제가 되지 않아서 문제가 발생합니다. 늘 그렇듯 한번은 잘되는데 두번 세번호출시 폼이 안 열리거나 종료시 메모리오류.. 정말 지긋지긋하죠...

modal form 처럼 호출 문 바로 아래에 free를 넣을 수 있는 것도 아니고요 free코드를 넣으면 생성과 동시에 없어집니다. 독립적으로 실행이 되기 때문에.. 그럴수 밖에 없을거라 생각이 드네요.

그렇다고 계속 폼을 계속 생성하고 메모리해제를 하지않고 종료를 반복하다보면.. 낭비가 심해지겠지요.. 특별한 가비지 컬렉터가 있는게 아니라서.. 타이머를 돌려놓던가 처리로직이 없다면.. 그 프로그램을 며칠씩 켜 놓고 사용 중 이라면. 금세 메모리가 넘쳐 나게 되어 다운되거나 비정상적으로 프로그램이 종료가 될 것이 뻔합니다.


하지만 찾아보니 생각보다 어렵지 않은 방법이네요 코드 한 줄만 추가하면 됩니다 ;;;;

알면 금방인것이지만.. 모르면 많이 헤메겠죠..?



onFormClose event...
begin
action := caFree;
[formname] := nil;
end; 


이것 때문에 타이머도 돌려보고 이것 저것 으로 해결이 안되어서 고생했었는데 한방에 해결이 됩니다.


오래가는 안정성 있는 프로그램을 만들려면 메모리관리는 필수 인 것 같습니다.













댓글