WPF与GDI内存增长

时间:2009-10-09 01:18:34

标签: c# wpf memory-management gdi+

我在WPF(C#)中编写了一个应用程序,用于绘制某些类型的分形。数据集是3d点,需要表示为单个像素。用户可以单击并拖动以旋转绘图点的数量会有所不同,但可能会非常大(500万个或更多)。目前,我使用Graphics对象绘制到System.Drawing.Bitmap,然后将WPF Image的Source属性设置为该位图。我的问题是,当我反复重绘图像内存消耗稳步爬升。当用户拖动鼠标时,会重复调用Plot()方法。

public void Plot()
{
    Graphics g = Graphics.FromImage(bmpCanvas);

    //Draw on the graphics object
    //...
    //...
    //...

    g.Dispose();
    Canvas.Source = loadBitmap(bmpCanvas);
    GC.Collect();
}

private BitmapSource loadBitmap(System.Drawing.Bitmap source)
{
    return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(source.GetHbitmap(), IntPtr.Zero, Int32Rect.Empty,
        System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}

具体来说,我想知道我能做些什么来防止记忆无法控制地攀爬。

总的来说,我想知道这首先是一个好方法。我想在wpf应用程序中显示自定义绘制的图像,并且能够快速完成(IE。一个不错的帧速率)

在WPF框架内有更原生的方法吗?我应该抛弃WPF并回到Windows窗体,我可以更精确地控制事物吗?

1 个答案:

答案 0 :(得分:0)

解决。通过使用DeleteObject清理hbitmap的实例解决了该问题。有关详细信息,请参阅WPF CreateBitmapSourceFromHBitmap() memory leak