2013-02-11 6 views
1

자식 창을 닫으면 일부 외부 리소스 (BitmapImage 클래스의 이미지)에서 사용하는 메모리를 어떻게 해제 할 수 있습니까?WPF에서 창을 닫을 때 메모리 해제

모든 이미지가로드 된 상태에서 자식 창이 열리면 작업 관리자에서 내 응용 프로그램 (C# .NET 3.5의 WPF 사용)이 사용 중일 때 ~ 800,000KB를 사용하지만 닫을 때 메모리 사용량이 동일합니다. 나는 응용 프로그램이 Dispose()와 함께 WinForms 응용 프로그램처럼이 자원을 처리하지 않는다고 생각합니다. 방법.

+0

Servy의 대답은 상당히 정확합니다. 그러나 이미 메모리를 버리고 있다면 GC가 메모리를 지울 때까지 약간의 시간이 걸릴 수 있다는 사실을 알고 있어야합니다. 특히 그것이 큰 기억이라면. 이는 관리되는 메모리의 세 번째 계층에서 끝날 수 있습니다. –

+0

'using' 문에서 양식을 랩핑 한 다음 자신의'Dispose' 메소드를 구현 했습니까? –

+0

누가 리소스, 비트 맵 이미지 등을 필요로하는지 결정하고 창을 닫을 때까지 기다리지 말고 메모리를 버리십시오. 그렇게하기위한 또 다른 방법은'Dispose'를 호출하는 것이 아니라 나중에'using() {} 절/문장'주위에 풀어 놓아야 할 모든 내용을 래핑하는 것입니다. – MethodMan

답변

1

FormClosed 이벤트 처리기에서 리소스를 삭제할 수 있습니다.

또 다른 옵션은 디자이너 파일로 이동하여 Dispose 메서드에서 호출하는 부분 메서드 (partial void AdditionalDisposal();)를 추가 한 다음 비 디자이너 코드에서 해당 부분 메서드의 구현을 정의 할 수 있습니다. 당신은 보유하고있는 일회용 자원을 모두 처분합니다.

+0

소멸자와 몇 가지 메소드 인 메모리 그 순간에 공개되지는 않지만 그림이있는 창을 다시 열면 메모리가 즉시 해제되고 다시 채워집니다. 이는 프로그램의 메모리 공간에 메모리가 추가되지 않기 때문에 매우 유용합니다. – FukYouAll

관련 문제