이미지를 데이터베이스로 캡처하고 저장하는 응용 프로그램을 개발했지만 메모리 사용에 문제가 있습니다. 내 도메인 객체에 나는 3 개 속성이 있습니다WPF에서 바이트 배열의 이미지 표시 - 메모리 문제
이미지 - 바이트 배열, 내용
이 RealImageThumb jpg이 있습니다 - 바이트 배열이 BitmapImage로 변환 축소, 다른 썸네일
을 가진있는 gridview에서 사용자에게 표시RealImage - 바이트 배열이 비트 맵 소스로 변환 된 setter가 없으며 사용자가이 필드를 가리키면 툴팁에 표시됩니다.
내가 가진 문제는 사용자가 차례로 각 이미지를 가리키면 메모리 사용이 나선 소리가 난다는 것입니다. 사용자가 비트 맵 소스를 생성하고 메모리가 해제되지 않은 상태에서 RealImage에 배킹 속성을 부여하고 null에 할당하려고했지만 메모리가 해제되지 않은 것을 알았습니다 (쓰레기를 기다리는 중). 수집기?).
편집 :
이게 무슨 의미입니까? 아래에 툴팁에 아무 것도 표시되지 않지만, WeakReference<BitmapImage>
을 정의하고 정의하면 System.WeakReference에 형식 매개 변수 오류가 발생합니다.
private WeakReference _realImage;
public virtual BitmapImage RealImage
{
get
{
if (_realImage == null || _realImage.Target == null)
{
if (Image == null) return null;
var newBitmapImage = new BitmapImage();
newBitmapImage.BeginInit();
newBitmapImage.CacheOption = BitmapCacheOption.None;
newBitmapImage.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
newBitmapImage.StreamSource = new MemoryStream(Image);
newBitmapImage.EndInit();
_realImage = new WeakReference(newBitmapImage);
}
return (BitmapImage)_realImage.Target;
}
}
문제가 발생했습니다. 자세한 내용은 내 질문을 업데이트했습니다. 감사합니다 – ChrisFletcher
질문에 추가 한 코드가 올바르게 보입니다. 몇 가지 사항을 명확히하고 RealImage 바인딩을 RealImage.Target으로 변경하기 위해 답변을 업데이트했습니다. 이 방법이 효과가 있습니까? 그렇지 않다면 사용하려고 할 때 어떤 일이 발생합니까? –