Я получаю изображения с нескольких камер и просто помещаю объект Image в WPF. Но есть проблема утечки памяти. Вот код:
for (int i = 0; i < grabResultsList.Count; i++)
{
int width = grabResultsList.ElementAt(i).Width;
int height = grabResultsList.ElementAt(i).Height;
byte[] pixels = grabResultsList.ElementAt(i).PixelData as byte[];
byte[] pixelsnew = getNewByteArray(pixels, width, height);
int stride = width / 2 * 3;
BitmapSource bitmap = BitmapSource.Create(width / 2, height / 2, 96d, 96d, pf, null, pixelsnew, stride);
StackPanel s = MainGrid.Children[i] as StackPanel;
Image img = s.Children[0] as Image;
img.Source = bitmap;
grabResultsList.ElementAt(i).Dispose();
GC.Collect();
}
А вот график памяти, взятый из визуальной студии;
![CLICK HERE FOR IMAGE](https://i.stack.imgur.com/c1RNV.png)
Как видите, график RAM постоянно увеличивается.
Когда я комментирую эту строку
img.Source = bitmap;
for (int i = 0; i < grabResultsList.Count; i++)
{
int width = grabResultsList.ElementAt(i).Width;
int height = grabResultsList.ElementAt(i).Height;
byte[] pixels = grabResultsList.ElementAt(i).PixelData as byte[];
byte[] pixelsnew = getNewByteArray(pixels, width, height);
int stride = width / 2 * 3;
BitmapSource bitmap = BitmapSource.Create(width / 2, height / 2, 96d, 96d, pf, null, pixelsnew, stride);
StackPanel s = MainGrid.Children[i] as StackPanel;
Image img = s.Children[0] as Image;
//img.Source = bitmap;
grabResultsList.ElementAt(i).Dispose();
GC.Collect();
}
![CLICK HERE FOR IMAGE](https://i.stack.imgur.com/KLDcD.png)
Как видите, график ОЗУ постоянен.
Я использую GarbageCollector, но все же у меня есть эта проблема.
Есть ли способ избавиться от объекта Image или что мне делать?