4

RenderTargetBitmapからインスタンスを作成して画像をレンダリングするたびに、RenderTargetBitmapを使用して画像をレンダリングしようとしていますが、メモリが増加し、メモリが解放されることはありません。これがコードです。

RenderTargetBitmap rtb = new RenderTargetBitmap((int)(renderWidth * dpiX / 96.0),
                                                (int)(renderHeight * dpiY / 96.0),
                                                dpiX,
                                                dpiY,
                                                PixelFormats.Pbgra32);
    DrawingVisual dv = new DrawingVisual();
    using (DrawingContext ctx = dv.RenderOpen())
    {
       VisualBrush vb = new VisualBrush(target);
       ctx.DrawRectangle(vb, null, new System.Windows.Rect(new Point(0, 0), new Point(bounds.Width, bounds.Height)));
    }
    rtb.Render(dv);

どうすればメモリを解放できますか、そしてすべてに感謝します。

4

2 に答える 2

0

少なくとも私の経験では、これは本当のメモリリークではありません。タスクマネージャでメモリ使用量が急増するのがわかりますが、ガベージコレクタは、実際に必要なときにそれを処理する必要があります(または、GC.Collect()を自分で呼び出してこれが発生することを確認できます)。とはいえ、図形を描画している場合、DrawingContext/DrawingVisualsはWPFでは理想的ではありません。ベクターグラフィックスを使用する方がはるかに優れており、スケーラビリティやこのメモリ使用量の問題が発生しないなど、多くの副次的な利点があります。

ここで同様の質問に対する私の答えを参照してください:プログラムはメモリを消費しすぎます

于 2011-07-16T06:00:55.357 に答える