我有一个3.5WPF应用程序,使用的是RenderTargetBitmap。
它像一只大熊一样吃着记忆。
RenderTargetBitmap.Render存在内存问题,这在3.5中是一个众所周知的问题。
已经找到了一些解决办法,但我没有帮助。https://connect.microsoft.com/VisualStudio/feedback/details/489723/rendertargetbitmap-render-method-causes-a-memory-leak
Program takes too much memory和更多..。
不管怎么说,有没有更多的想法来解决它.
static Image Method(FrameworkElement e, int width, int height)
{
const int dpi = 192;
e.Width = width;
e.Height = height;
e.Arrange(new Rect(0, 0, width, height));
e.UpdateLayout();
if(element is Graph)
(element as Graph).UpdateComponents();
var bitmap = new RenderTargetBitmap((int)(width*dpi/96.0),
(int)(height*dpi/96.0),
dpi,
dpi,
PixelFormats.Pbgra32);
bitmap.Render(element);
var encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
using (var stream = new MemoryStream())
{
encoder.Save(stream);
element.Clip = null;
Dispose(element);
bitmap.Freeze();
DisposeRender(bitmap);
bitmap.Clear();
GC.Collect();
GC.WaitForPendingFinalizers();
return System.Drawing.Image.FromStream(stream);
}
}
public static void Dispose(FrameworkElement element)
{
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
public static void DisposeRender(RenderTargetBitmap bitmap)
{
if (bitmap != null) bitmap.Clear();
bitmap = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}发布于 2014-07-21 20:57:03
如果使用RenderTargetBitmap资源监视器( Resource )监视类的行为,则可以看到每次调用该类时,都会丢失500 if的内存。我对你的问题的回答是:不要多次使用RenderTargetBitmap类
您甚至不能释放使用过的RenderTargetBitmap内存。
如果您确实需要使用RenderTargetBitmap类,只需在代码的末尾添加这些行即可。
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()https://stackoverflow.com/questions/10847454
复制相似问题