2009-10-09 89 views
0

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

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并返回到窗体窗体中,我可以更精确地控制事物吗?

回答