は、過去にここで質問した - しかし、どちらも私の問題の解決策だった:私はにメモリから画像をロードまだメモリリーク - 画像・ソースへの結合メモリのBitmapImage私は非常によく似た質問を知って
をBitmapImage:その後、
private static BitmapImage LoadImage(byte[] imageData)
{
if (imageData == null || imageData.Length == 0) return null;
var image = new BitmapImage();
using (var mem = new MemoryStream(imageData))
{
mem.Position = 0;
image.BeginInit();
image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = null;
image.StreamSource = mem;
image.EndInit();
}
image.Freeze();
return image;
}
そして、(ページ上)Imageオブジェクトのソースへの結果のBitmapImageをバインドする(INotifyPropertyChangeで)これを使用します。
問題は次のようになります。これはメモリリークが発生します
あなたも、この使用してプロファイラを見つけることができません - 唯一の.NETメモリプロファイラは、上の私を得た(2-3画像に300MBまでの私の場合には多くのことを!)
:トラック(それはすべてのバイトが行くところアンマネージメモリにだとして - 素敵な - ので、ANTSは、「NETは、アプリケーションに割り当て19,24MB 367,3MBの合計プライベートバイトを使用している」私に言います)私は何を試みても、私はこの漏れを取り除かない。 は(シングルと一度にすべての)みました:
- 明確なビジュアルツリー/アンロード 代わりに画像
- の長方形で
- 使用ImageBrushをゼロにするためにイメージ・ソースを設定し
- 上の画像を削除しますMemoryStreamを
- を設けることなく、他のCacheOptionsイメージに
を凍結していない私はこれを取得しない - 本当に! ソースでイメージの使用をやめると、すべてが正常です(リークはありません)。
誰かがお試しできるオプションはありますか?これはまったくのバグ(私の第二のコメントを参照)されていないよう
REMARK は思える - 私はこれをチェックする必要があるので、私は今の質問はオープンさせます - 多分これは、同様にこの上の他の質問を支援することができます
...これについてコメントしてください"リーク"のようなメモリリークは約550MBに制限されているようです - ビットマップを再度読み込むと、この(200〜300MB)のメモリが解放された後 - でも、これはまったく望ましい動作ではありません... – Carsten
よく...オハイオ州 - 私の問題は、愚かな画像の使用によって引き起こされるようです。写真はユーザーによって提供されています(いくつかの種類の地図 - 白黒の白/白)。ファイルサイズ(約1MB)のみを見ましたが、それらは.JPGで、写真は最大10,000の解像度を持っていますX 5000ピクセル(sic!) - これを32bitに解凍して、1枚の画像あたり150MB以上に簡単に収まるので、これを「解決」と呼ぶことができますが、今すぐ開けます。コメントと私はまだ "回避策"(= resonable写真)を試す必要があります – Carsten