【发布时间】:2011-07-05 16:22:06
【问题描述】:
我有一个类可以存储图像及其文件名。我创建了此类的 ObservableCollection,并将其绑定到 WPF 列表框。 (它是一种图像查看器)
我加载了 50 meg 的数据(目前大约 10 张图像),然后我想从 observable 集合中删除一个、部分或全部图像并替换它们(这样内存占用不会变得太大而同时滚动浏览许多图像)。
首先,我实际上在 GUI 上有一个按钮来加载“接下来的 10 张图像”——它确实如此,但它使内存占用增加了一倍。我尝试从集合中调用 .Clear() 和 .ClearItems() 以及 .Remove() 和 .RemoveAt(n) 但内存没有减少。我是否误解了 ObservableCollection 的工作原理?
这是我的代码概要:
公共类 ImageDataList : ObservableCollection
{
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;
}
}
加载图像后,通过以下方式传递给 GUI:
listBox.DataContext = 图像;
我希望我已经说清楚了......如果我应该添加任何内容,请告诉我!
编辑:现在我似乎已经通过覆盖 ObservableCollection 中的一个项目来解决问题,而不是尝试删除/清除它然后添加一个新项目。不过我还是不明白内存问题。
【问题讨论】:
-
您会处理从收藏中删除的图像吗?
-
我需要吗?在上面的 ObservableCollection 的 Load 中,我加载了图像
ImageData imgData = ImageData.Load(filename);,但我没有明确地处理它。它不应该持续存在,不是吗?
标签: c# .net wpf observablecollection