시스템 : Windows XP SP3, .NET 3.5, 4GB RAM, 이중 1.6gWPF가 메모리에서 큰 BitmapSource를 해제하는 방법은 무엇입니까?
매우 큰 PNG를로드하고 전환하는 (스토리 보드 애니메이션 사용) WPF 응용 프로그램이 있습니다. 이러한 PNG는 8190x1080 해상도입니다. 응용 프로그램이 실행되면 이미지를 캐시하고 시스템 메모리가 천천히 움직입니다. 결국 시스템을 질식시키고 OutOfMemoryException을 throw합니다.
1) 나는로드 할 때 내가 없음으로 BitmapSource는 BitmapCacheOption을 설정하고
2) 응용 프로그램에서 BitmapSource는 개체를 제거하고 : 여기
내가 현재이 해결을 위해 복용하고있는 단계입니다 BitmapSource3) 일단로드되면 BitmapSource가 고정됩니다.
4) 소스를 사용하는 이미지에 대한 모든 참조와 소스 자체에 대한 참조를 모두 삭제합니다.
5) 위 단계를 수행 한 후 GC.Collect()를 수동으로 호출하면 완료됩니다.
WPF가 이러한 이미지에 대해 메모리에 매달려있는 이유와이를로드하는 데 사용 된 메모리가 제대로 복구되었는지 확인하는 것이 좋습니다.
BitmapSource source = new BitmapSource()가 컴파일되지 않아 그 이유가 확실하지 않습니다. 오류 'System.Windows.Media.Imaging.BitmapSource'추상 클래스 또는 인터페이스의 인스턴스를 만들 수 없습니다. – discorax
Ahh ... BitmapSource 대신 BitmapImage를 사용할 때 컴파일됩니다. 이제 문제가 어떻게 발생합니까? :) – discorax
이 접근법은 지금까지 유망 해 보입니다. 나는 계속 시험 할 것이다. – discorax