если вы отслеживаете поведение класса RenderTargetBitmap
с помощью Resource Monitor , вы можете видеть, что при каждом вызове этого класса вы теряете 500 КБ памяти. Мой ответ на ваш вопрос: не используйте RenderTargetBitmap
класс так много раз
Событие не может высвободить использованную память RenderTargetBitmap.
Если вам действительно нужно использовать класс RenderTargetBitmap
, просто добавьте эти строки в конец вашего кода.
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
это может решить вашу проблему:
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);
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();