2009-10-09 93 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並返回到窗體窗體中,我可以更精確地控制事物嗎?

回答