3

私は 1 GB を超える画像ファイルを扱ってBitmapおり、大きなファイルからを作成しBitmapSource、元のファイルを破棄しようとしていBitmapSourceます。記憶にBitmapSource残ります。通常、これは最終的に収集されるため不便ですが、これらの大きなファイルでは、すぐにメモリをクリアする必要があります。

System.Drawing.Bitmap bitmap;
using (MemoryStream outStream = new MemoryStream())
{
    BitmapEncoder enc = new BmpBitmapEncoder();
    enc.Frames.Add(BitmapFrame.Create(bitmapsource)); //large image
    enc.Save(outStream);
    bitmapsource = null;

    Bitmap temp = new System.Drawing.Bitmap(outStream);
    bitmap = temp.Clone(new Rectangle(0, 0, bm.Width, bm.Height), bm.PixelFormat);
    temp.Dispose();
}

GC.Collect();
GC.Collect();

//both bitmap and bitmapsource remain in memory

私はここで回避策に出くわしましたがBitmapSource、パイプラインのずっと後まで持続します。

4

0 に答える 0