我想弄清楚爲什麼我的Windows Phone 7.1應用程序保持內存。該應用程序從SkyDrive下載全分辨率圖像。它將這些圖像連接到圖像元素並將其顯示在畫布上。我已經玩了一段時間(太長了!),最近重寫我的代碼,以手動下載圖像,因爲我正在使用BitmapImage.SetSource(新的URI(等))發生悲劇內存泄漏。現在好多了,但我仍然有漏洞。想知道是否有人可以在我的代碼中發現它,非常感謝!binaryreader內存泄漏windows phone 8
下面是從內存設置圖像: http://sdrv.ms/18aXLja(沒有足夠的口碑此處將圖片直接上傳,很抱歉)
下面是正在調用的代碼。此代碼由指向圖像URL的WebClient實例的OpenReadCompleted事件觸發。此代碼針對圖表中的每個圖像加載運行(確切說是56次)。我無法弄清楚的是: - 爲什麼內存流在關閉後仍保留在內存中(圖像中沒有顯示的是Heap中有一個單獨的分配給BitmapImage.Sour)。
- 爲什麼BinaryReader分配仍然在堆上 - 爲什麼所有的ExpandArray分配仍然在堆上。
在此先感謝您的見解!
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
App.Progress.ProgressHide();
if (null != e.Error)
{ return; }
int index = iCenterImage;
if (null != e.UserState)
index = (int) e.UserState;
MemoryStream ms = new MemoryStream(350000);
//MemoryStream ms = new MemoryStream();
BinaryReader br = new BinaryReader(e.Result);
int bytesRead = 0;
int bufferLength = 4096;
byte[] buffer = new byte[bufferLength];
bytesRead = br.Read(buffer, 0, bufferLength);
while(bytesRead > 0)
{
ms.Write(buffer, 0, bytesRead);
bytesRead = br.Read(buffer, 0, bufferLength);
}
br.Close();
br.Dispose();
br = null;
BitmapImage b = new BitmapImage();
b.SetSource(ms);
ms.Close();
ms.Dispose();
ms = null;
if (iCenterImage == index)
{
centerImage.Source = null;
centerImage.Source = b;
}
else if (iCenterImage - 1 == index)
{
leftImage.Source = null;
leftImage.Source = b;
}
else if (iCenterImage + 1 == index)
{
rightImage.Source = null;
rightImage.Source = b;
}
}