gpt4 book ai didi

c# - RenderTargetBitmap 内存泄漏

转载 作者:行者123 更新时间:2023-11-30 12:15:46 37 4
gpt4 key购买 nike

我正在尝试使用 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);

我需要帮助我怎样才能释放内存并感谢所有人。

最佳答案

如果您使用 Resource Monitor 监控 RenderTargetBitmap 类的行为,您会发现每次调用此类时,您都会丢失 500KB 的内存。我对你的问题的回答是:不要多次使用 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();

关于c# - RenderTargetBitmap 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713868/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com