我正在开发一个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属性,我可以随时访问该属性,而无需在独立存储中不断获取文件。
感谢所有人的帮助
答案 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;
}
}