2012-02-07 8 views
3

は、過去にここで質問した - しかし、どちらも私の問題の解決策だった:私はにメモリから画像をロードまだメモリリーク - 画像・ソースへの結合メモリの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までの私の場合には多くのことを!) Memory-Profiler output

enter image description here

:トラック(それはすべてのバイトが行くところアンマネージメモリにだとして - 素敵な - ので、ANTSは、「NETは、アプリケーションに割り当て19,24MB 367,3MBの合計プライベートバイトを使用している」私に言います)

私は何を試みても、私はこの漏れを取り除かない。 は(シングルと一度にすべての)みました:

  • 明確なビジュアルツリー/アンロード
  • 代わりに画像
  • の長方形で
  • 使用ImageBrushをゼロにするためにイメージ・ソースを設定し
  • 上の画像を削除しますMemoryStreamを
  • を設けることなく、他のCacheOptionsイメージに

を凍結していない私はこれを取得しない - 本当に! ソースでイメージの使用をやめると、すべてが正常です(リークはありません)。

誰かがお試しできるオプションはありますか?これはまったくのバグ(私の第二のコメントを参照)されていないよう

REMARK は思える - 私はこれをチェックする必要があるので、私は今の質問はオープンさせます - 多分これは、同様にこの上の他の質問を支援することができます

+0

...これについてコメントしてください"リーク"のようなメモリリークは約550MBに制限されているようです - ビットマップを再度読み込むと、この(200〜300MB)のメモリが解放された後 - でも、これはまったく望ましい動作ではありません... – Carsten

+1

よく...オハイオ州 - 私の問題は、愚かな画像の使用によって引き起こされるようです。写真はユーザーによって提供されています(いくつかの種類の地図 - 白黒の白/白)。ファイルサイズ(約1MB)のみを見ましたが、それらは.JPGで、写真は最大10,000の解像度を持っていますX 5000ピクセル(sic!) - これを32bitに解凍して、1枚の画像あたり150MB以上に簡単に収まるので、これを「解決」と呼ぶことができますが、今すぐ開けます。コメントと私はまだ "回避策"(= resonable写真)を試す必要があります – Carsten

答えて

0

申し訳ありませんが、これは確かに "BUG"ではありませんでしたが、高解像度の写真が原因です。私は質問を削除したり、他の人が同じような状況になるかもしれないと私はここにそれを残すべきかどうかどう

*これは本当に*であればうーん...知らない

+0

ちょうどこれを正しい答えとして選択してください。 – Will

関連する問題