我正在制作一个简单的Windows Phone 8.1 Silverlight应用。我的想法是,我可以创建一个带有图片的条目(用相机拍摄)并添加标题和描述文本。保存条目后,主页面上会出现一个按钮以进行查看。所以我做了3个条目,它们列在主页面上,但在导航到他们的页面几次之后,我得到了一个NavigationFailed以及OutOfMemoryException。页面很简单,只包含1个图像和一些文本块。
我认为问题是图像仍在内存中,这就是为什么我尝试将它们设置为null并强制垃圾收集器,但这根本没有帮助。什么可能导致OutOfMemory异常?
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
string id= "";
if (NavigationContext.QueryString.TryGetValue("id", out id))
{
foreach (cEntry entry in helper.entries)
{
if (entry.id.ToString() == id)
{
textBlock_viewText.Text = entry.text;
textBlock_viewTitle.Text = entry.title;
using (IsolatedStorageFile userStore = IsolatedStorageFile.GetUserStoreForApplication())
{
if (userStore.FileExists(entry.imageFileName))
{
using (IsolatedStorageFileStream imgStream = userStore.OpenFile(entry.imageFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read))
{
BitmapImage bmp = new BitmapImage();
bmp.SetSource(imgStream);
image_viewEntryImage.Source = bmp;
bmp = null;
}
}
}
}
}
}
}
protected override void OnNavigatedFrom(NavigationEventArgs e)
{
base.OnNavigatedFrom(e);
image_viewEntryImage.Source = null;
GC.Collect();
}
答案 0 :(得分:0)
您可能需要冻结BitmapImage。
正如here所述,WPF(Windows Phone开发的典型框架)存在一个问题,即BitmapImages可能会被错误地保留。虽然据说它被修复了一段时间,但人们报告说在某些情况下仍然会看到问题。
答案 1 :(得分:0)
不要将bmp设置为null,请尝试此操作。
$a = table::select('name')->where('name', 'LIKE', "%.$term.%")->get();
调用此方法并将source设置为此自定义方法,然后将bmp作为null。 GC无法清除内存。详情请见Why do I get an OutOfMemoryException when I have images in my ListBox?