Скорее всего, вы выделяете новые растровые изображения, которые не являются одноразовыми. Вы должны выделить один WriteableBitmap
и обновить его. В связанной документации описан процесс блокировки, обновления и разблокировки WriteableBitmap
В программном обеспечении, в котором я работаю с использованием живых ультразвуковых изображений в WPF, я получаю растровое изображение Windows Forms, которое копирую в WriteableBitmap напрямую, используя собственный метод CopyMemory. Даже с этой более сложной работой, процессор не сильно напрягается, и использование памяти никогда не меняется, пока я правильно распоряжаюсь тем, что могу. Надеюсь, этот пример поможет вам:
// DLL returns images as a WinForms Bitmap
Bitmap bmp = myClass.getWinFormsBitmap();
// In my situation, the images are always 640 x 480.
BitmapData data = bmp.LockBits(new Rectangle(0, 0, 640, 480), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
this.writeableBitmap.Lock();
// Copy the bitmap's data directly to the on-screen buffers
NativeMethods.CopyMemory(this.writeableBitmap.BackBuffer, data.Scan0, ImageBufferSize);
// Moves the back buffer to the front.
this.writeableBitmap.AddDirtyRect(new Int32Rect(0, 0, 640, 480));
this.writeableBitmap.Unlock();
bmp.UnlockBits(data);
// Free up the memory of the WinForms bitmap
bmp.Dispose();
Где CopyMemory определяется как:
[DllImport("Kernel32.dll", EntryPoint = "RtlMoveMemory")]
public static extern void CopyMemory(IntPtr Destination, IntPtr Source, int Length);