2013-12-24 46 views
1

我正在使用Windows Phone 8應用程序,並且遇到了從文件流釋放資源的問題。當我訪問獨立存儲以獲取圖像時,會出現問題,然後將圖像設置爲視圖上的圖像源;這一切都發生在頁面加載時。 (我正在使用Windows Phone應用程序分析工具查看內存使用情況)。此外,無論何時關閉並重新打開應用程序中的頁面,內存使用率都會繼續增加。在Windows Phone 8中未釋放內存資源

這是我的代碼來獲取圖像,並將其設置:

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(); 
} 

有別的我應該做的正確釋放資源?

編輯

我意識到自己的問題......當應用程序首次啓動時我有它設置,我打開上面的代碼相同的圖像。所以當我用相同的圖像打開一個新頁面時,它似乎不會釋放現有的文件流資源,因爲它一遍又一遍地打開相同的文件。解決的辦法是在我的視圖模型中添加一個BitMapImage屬性,我可以隨時訪問,而無需不斷地抓取獨立存儲中的文件。

感謝所有人

+0

你確定上面的代碼使問題?網頁中是否有其他代碼? – asitis

回答

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; 
} 
} 
+0

謝謝,我只是試過,還是一樣的問題。如果由於可用內存很少而關閉並重新打開頁面超過3次,它實際上會崩潰。這可能是一個問題與Windows手機如何處理釋放頁面導航之間的資源? – user1186173

+0

上面的代碼肯定會處理這些資源。所以也許這個崩潰是由於其他原因?您是否看到任何錯誤消息,例如在Debug輸出窗口中?如果崩潰是由於異常引起的,那麼當拋出異常時能否將調試器設置爲中斷(顯示更多相關上下文)? – BobHy

+0

我絕對同意,我做了一些調試,並在這一行上崩潰:「imageFile.SetSource(fileStream);」。例外是OutOfMemoryException – user1186173

0

您需要使用來源,而不是歡迎使用屬性的的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; 
} 
} 
+0

我必須使用ImageSource,因爲我將圖像設置爲視圖上的ImageBrush。 – user1186173