C# 具有GDI内存增长的WPF

C# 具有GDI内存增长的WPF,c#,wpf,memory-management,gdi+,C#,Wpf,Memory Management,Gdi+,我正在用WPF(C#)编写一个应用程序,它绘制某些类型的分形。数据集是3d点,需要表示为单个像素。用户可以单击并拖动以旋转绘图。点的数量不同,但可能相当大(500万个绘图或更多)。目前,我正在使用图形对象绘制System.drawing.Bitmap,然后将WPF图像的源属性设置为该位图。我的问题是,当我反复重画图像时,内存消耗稳步上升。当用户拖动鼠标时,将重复调用Plot()方法 public void Plot() { Graphics g = Graphics.FromImage(

我正在用WPF(C#)编写一个应用程序,它绘制某些类型的分形。数据集是3d点,需要表示为单个像素。用户可以单击并拖动以旋转绘图。点的数量不同,但可能相当大(500万个绘图或更多)。目前,我正在使用图形对象绘制System.drawing.Bitmap,然后将WPF图像的源属性设置为该位图。我的问题是,当我反复重画图像时,内存消耗稳步上升。当用户拖动鼠标时,将重复调用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应用程序中显示自定义绘制的图像,并且能够快速显示(即,合适的帧速率)


在WPF框架内有没有更自然的方法来实现这一点?我是否应该抛弃WPF,回到windows窗体,在那里我可以更精确地控制事情?

解决了。通过使用DeleteObject清理hbitmap实例解决了这个问题。有关更多详细信息,请参阅