画像をキャプチャしてデータベースに保存するアプリケーションを開発しましたが、メモリ使用量に問題があります。私のドメイン オブジェクトには、3 つのプロパティがあります。
画像 - バイト配列、内容は jpg
RealImageThumb - BitmapImage に変換されて縮小されたバイト配列で、他のサムネイルと共にグリッドビューでユーザーに表示されます
RealImage - ビットマップ ソースに変換されたバイト配列であり、ユーザーがカーソルを合わせるとツールチップに表示されます。
私が抱えている問題は、ユーザーが各画像にカーソルを合わせると、メモリ使用量がスパイラルになることです。ユーザーが生成されたビットマップ ソースにカーソルを合わせてもメモリが解放されないことに気付きました。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;
}
}