Я пишу приложение в WPF (C#), в котором представлены фракталы определенных типов. Наборы данных представляют собой 3D-точки и должны представляться как отдельные пиксели. Пользователь может щелкнуть и перетащить, чтобы повернуть графики. Количество очков варьируется, но может быть довольно большим (пять миллионов участков или более). В настоящее время я рисую на System.Drawing.Bitmap, используя объект Graphics, а затем устанавливая свойство Source WPF Image для этого растрового изображения. Проблема заключается в том, что когда я многократно перерисовываю, потребление памяти памяти неуклонно поднимается. Метод 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 и быть в состоянии сделать это быстро (IE. Приличная частота кадров)
Есть ли более собственный способ сделать это в рамках WPF? Должен ли я разорвать WPF и вернуться к формам окон, где я могу более точно контролировать ситуацию?