我創建了一個動態下載並保存多個大圖像的數據透視表。 我首先使用webclient下載圖像並將其寫入磁盤。 比創建一個包含所有圖像的圖像列表數組。 基本思想是我只在需要時才加載圖像。 說我的清單中有12張圖像。每張幻燈片只顯示1個圖像。假設我們正在查看圖片7.我繼續爲下一張幻燈片預加載圖片6 & 8。OutOfMemory異常<BitmapImage> .SetSource()
1, 2, 3, 4, 5, [6, {7}, 8], 9, 10, 11, 12
當用戶通過幻燈片瀏覽時,我保持圖像在「[]」之外預加載並卸載。
我用於預加載圖像的代碼:
BitmapImage bi = new BitmapImage();
bi.SetSource(GetStream(fileName);
IMGSource = bi; // IMGSource<ImageSource> referenced by the xaml in Image Binding IMGSource.
我用來卸載圖像的代碼:
IMGSource = null;
GC.Collect(); // I force the program to Garbage collect since the image is really large.
的問題是,一些圖像被觀看後(約9圖像)。它會在該行中引發OutOfMemory異常:bi.SetSource
。
我檢查了卸載功能都工作正常(它不釋放內存調用收集後,和內存保持在一個穩定的點)
但它仍然拋出一個異常OutOfMemory
。 我該怎麼辦?
編輯:
我才發現,其實內存通過幻燈片導航時繼續上升
。通過調用:
Microsoft.Phone.Info.DeviceStatus.ApplicationCurrentMemoryUsage;
它給喜歡回憶:
54.7 MB, 76.91 MB, 111.94 MB, 105 MB, 112.71 MB, 141.93 MB, 148.42 MB, Exception thrown
但通過調用:
GC.GetTotalMemory(false);
它顯示只有約1.2~1.3 MB
。
發生了什麼?不應該釋放內存?
請對[格式](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks)更敏感 – 2013-02-16 18:26:24
對不起,我正在使用我的手機發布。它沒有預覽給我,我輸入了四個空格代碼。但事實證明它並不起作用:\ – user1510539 2013-02-16 18:29:28
這可能不是泄漏的根源,但您應該確保在加載圖片後關閉流:'使用(var stream = GetStream(fileName)){bi .SetSource(流); }' – 2013-02-16 19:20:48