1
我想使用WriteableBitmap對象,因爲我需要它來旋轉圖像並將圖像保存到我的應用程序的獨立存儲。WP8 WriteableBitmap構造函數保留大量內存
問題是,它使用了太多內存,最終導致內存不足異常。
下面是我的應用程序的內存使用情況圖片,圖片鏈接爲here,以便更好地查看。
這裏的,我使用WriteableBitmap的一個實例:
WriteableBitmap picture = new WriteableBitmap(PictureCanvas, null);
using (var memoryStream = new MemoryStream())
{
picture.SaveJpeg(memoryStream, picture.PixelWidth, picture.PixelHeight, 0, 100);
using (var myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
{
using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(Globals.OVERLAY_FILE_NAME, FileMode.Create, myIsolatedStorage))
{
fileStream.Write(memoryStream.ToArray(), 0, memoryStream.ToArray().Length);
fileStream.Close();
}
}
}
picture = picture.Crop(0, 0, 1, 1);
我嘗試裁剪圖像,使其佔用更少的內存,但並不做任何事情。
我正在使用WriteableBitmap擴展庫here,並在頭版中提到Dispose()方法,但我沒有在我的應用程序中看到它。
如果有人可以請告訴我如何解決這個問題或指向我的某個地方,我可以找到一個可能的解決方案,那太棒了!
我能夠通過將writeableBitmap設置爲null來減少內存使用量。現在我沒有在我的問題中包括這個,但是我正在從視頻刷中獲取內存泄漏,這實際上是導致我的泄漏。我會建議設置爲空。我還查看了你的代碼,並且處理了你製作的流,但是不要關閉它們。也許這將有助於?我還建議製作一個小應用程序,只使用writeableBitmap來製作圖像,然後檢查內存使用情況,並繼續構建小樣本,直到發現泄漏。 –
謝謝克里斯!儘管我注意到了,但我瞥了一眼畫筆的歸零。處理一個流自動關閉它,使用反射器,IL間諜或任何其他反編譯工具檢查出來。這是多餘的。 –
但是,請嘗試這個東西,直接寫入fileStream並避免MemoryStream。 MemoryStream使用了內部重新分配的字節數組(每次溢出時翻倍)併產生大量垃圾。最後,我沒有看到它的目的.. –