1

我有一個應用程序需要下載並保存設備上的文件 - 視頻。Windows Phone IsolatedStorage

視頻短~10分鐘,質量差,這意味着它們的大小是最小的。

所以,問題是,當我下載一些文件 - 一切順利,但一些文件失敗,錯誤: 內存不足的異常。從邏輯上講,我認爲小於一定大小(例如50MB)的文件可以很好地下載,但更高 - 異常。

這裏是我的代碼:

異常詳細信息:

System.OutOfMemoryException was unhandled Message: An unhandled exception of type 'System.OutOfMemoryException' occurred in System.Windows.ni.dll

異常圖像:

enter image description here

對此有一個解決方法嗎?

回答

0

當響應完全加載時,它完全駐留在內存中。這導致您的OutOfMemoryException。解決方案是將響應直接「流」到獨立存儲中。

請注意,下面的解決方案目前的缺點是您正在失去下載進度信息。

public async void btnDownload2_Click() 
{ 
    try 
    { 
    var httpClient = new HttpClient(); 
    var response = await httpClient.GetAsync(new Uri("http://somelink/video/nameOfFile.mp4"), HttpCompletionOption.ResponseHeadersRead); 

    response.EnsureSuccessStatusCode(); 

    using(var isolatedStorageFile = IsolatedStorageFile.GetUserStoreForApplication()) 
    { 
     bool checkQuotaIncrease = IncreaseIsolatedStorageSpace(e.Result.Length); 

     string VideoFile = "PlayFile.wmv"; 
     using(var isolatedStorageFileStream = new IsolatedStorageFileStream(VideoFile, FileMode.Create, isolatedStorageFile)) 
     { 
     using(var stm = await response.Content.ReadAsStreamAsync()) 
     { 
      stm.CopyTo(isolatedStorageFileStream); 
     } 
     } 
    } 
    } 
    catch(Exception) 
    { 
    // TODO: add error handling 
    } 
} 
+0

但HTTP客戶端僅適用於4.5+框架和Windows Phone 8 但我的應用程序需要在WP7 + – Cheese

+0

所以正確的問題將被移植,我怎麼能實現直接保存到隔離來自WebClient或HTTP客戶端的存儲 – Cheese

+0

WP7.5支持HttpClient。甚至包括異步/等待支持。看到這個頁面:http://blogs.msdn.com/b/bclteam/archive/2013/02/18/portable-httpclient-for-net-framework-and-windows-phone.aspx –

相關問題