У меня есть класс, который хранит изображение вместе с именем файла.Я создал ObservableCollection этого класса и привязал его к списку WPF.(Это своего рода просмотрщик изображений)
Я загружаю данные объемом 50 мегабайт (в настоящее время около 10 изображений), затем я хочу удалить одно, несколько или все изображения из наблюдаемой коллекции и заменить их (так чточто объем памяти не становится слишком большим при прокрутке многих изображений).
Для начала, у меня на самом деле есть кнопка в графическом интерфейсе для загрузки «следующих 10 изображений» - что он и делает,но это удваивает объем памяти.Я пытался вызвать .Clear () и .ClearItems () из коллекции, а также .Remove () и .RemoveAt (n), но память не уменьшается.Я неправильно понимаю, как работает ObservableCollection?
Вот краткий обзор моего кода:
public class ImageDataList : ObservableCollection
{</p>
<code> public static ImageDataList Load(string path,int startVal, ImageDataList images)
{
// Load 10 images from defined start position
if (startVal<0)
startVal=0;
int endVal = startVal + 10;
if (endVal > Directory.GetFiles(path).Length)
endVal = Directory.GetFiles(path).Length;
// Attempt to clear all data from collection
images.ClearItems();
images.Clear();
while (images.Count>1)
{
images.RemoveAt(0);
}
for (int i = startVal; i < endVal; i++)
{
string filename = Directory.GetFiles(path)[i];
if (filename.Contains(".tif"))
{
ImageData imgData = ImageData.Load(filename);
images.Add(imgData);
}
}
return images;
}
}
</code>
После загрузки изображений он передается в графический интерфейс через:
listBox.DataContext = images;
Надеюсь, я все понял ... дайте мне знать, если я что-нибудь добавлю!
Редактировать: Пока я, кажетсярешили проблему, переписав элемент в ObservableCollection, вместо того, чтобы пытаться удалить / очистить его, а затем добавить новый.Я все еще не понимаю проблемы с памятью.