我前一段時間發佈相關的WriteableBitmap的內存泄漏問題,雖然我接到相關問題的精彩提示,我仍然認爲這是一個嚴重的錯誤/(錯誤我做的)/(混亂)/ (一些其他的東西)在這裏。如何處理可寫位圖? (WPF)
所以,這裏又是我的問題:
假設我們有一個形象和一個按鈕WPF應用程序。圖像的來源是一個非常大的位圖(3600 * 4800像素),當它在運行時的顯示的一個應用消耗〜90 MB。
現在假設我希望從圖像(真正的大圖像),源實例化一個WriteableBitmap的,當這種情況發生的應用程序消耗〜220 MB。
現在出現了棘手的部分,當對圖像的修改(通過WriteableBitmap)結束時,以及對WriteableBitmap的所有引用(至少我知道的那些)都被銷燬(在方法結束時或將其設定爲null)由WriteableBitmap的使用的存儲器應該釋放和應用程序消費應返回到〜90 MB。問題是有時會返回,有時不會。
這裏是一個示例代碼:
// The Image's source whas set previous to this event
private void buttonTest_Click(object sender, RoutedEventArgs e)
{
if (image.Source != null)
{
WriteableBitmap bitmap = new WriteableBitmap((BitmapSource)image.Source);
bitmap.Lock();
bitmap.Unlock();
//image.Source = null;
bitmap = null;
}
}
正如你所看到的引用是本地和內存應該在方法結束(或當垃圾回收器決定這樣做)被釋放。但是,應用程序可能消耗〜224 MB直到宇宙結束。
任何幫助將是偉大的。