Windows Phone 8中未释放内存资源

时间:2013-12-24 04:24:16

标签: c# windows-phone-8

我正在开发一个Windows Phone 8应用程序,我遇到了从文件流中释放资源的问题。当我访问隔离存储以获取图像时,问题就出现了,然后我将图像设置为视图上的图像源;这一切都发生在页面加载时。 (我正在使用Windows Phone应用程序分析工具查看内存使用情况)。此外,每当我关闭并重新打开应用程序中的页面时,内存使用量将继续增加。

这是获取图像并设置图像的代码:

IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication();
using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile("background.jpg", FileMode.Open, FileAccess.Read))
{
    BitmapImage imageFile = new BitmapImage();
    imageFile.SetSource(fileStream);
    BackgroundImage.ImageSource = imageFile;

    // tried using .Close() but it wasn't releasing the resources as well. 
    fileStream.Dispose();
}

我是否应该采取其他措施来正确释放资源?

修改

我意识到我的问题......当应用程序首次启动时,我将它设置为与上面代码中打开的相同的图像。因此,当我打开具有相同图像的新页面时,它似乎不会释放现有的文件流资源,因为它一遍又一遍地打开同一个文件。解决方法是在我的View Model中添加一个BitMapImage属性,我可以随时访问该属性,而无需在独立存储中不断获取文件。

感谢所有人的帮助

2 个答案:

答案 0 :(得分:0)

您也需要处理IsolatedStorageFile。这应该工作(虽然我没有编译)

using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) {
using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile("background.jpg", FileMode.Open, FileAccess.Read))
{
    BitmapImage imageFile = new BitmapImage();
    imageFile.SetSource(fileStream);
    BackgroundImage.ImageSource = imageFile;
}
}

答案 1 :(得分:0)

您需要使用Source propety而不是ImageSource:

using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) {
using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile("background.jpg", FileMode.Open, FileAccess.Read))
{
    BitmapImage imageFile = new BitmapImage();
    imageFile.SetSource(fileStream);
    BackgroundImage.Source= imageFile;
}
}