2011-12-09 14 views
0

をダウンロードすると、高いメモリを克服する方法HttpWebRequestを使用してフィードをダウンロードします。私は、メモリの増加をダウンロードして、彼らは前のフォームに戻ったときに減少していないときでも:私のプロジェクトでHttpWebRequestを使用して

#region RequestDataFromServer 
private void RequestDataFromServer(object o) 
{ 
    if (!string.IsNullOrEmpty(ServerUri)) 
    { 
     if (DownloadStatus == DownloadState.Downloading) 
      return; 
     DownloadStatus = DownloadState.Downloading; 

     HttpWebRequest serverRequest = (HttpWebRequest)WebRequest.Create(ServerUri); 
     serverState = new ServerRequestUpdateState(); 
     serverState.AsyncRequest = serverRequest; 

     IAsyncResult result = 
(IAsyncResult)serverRequest.BeginGetResponse(new AsyncCallback(RequestResponse), serverState); 

    } 
} 
#endregion 

#region RequestResponse 
void RequestResponse(IAsyncResult asyncResult) 
{ 
    var offlineStream = IsolatedStorageSettings.ApplicationSettings; 
    serverState = (ServerRequestUpdateState)asyncResult.AsyncState; 
    HttpWebRequest serverRequest = (HttpWebRequest)serverState.AsyncRequest; 
    try 
    { 
     serverState.AsyncResponse = (HttpWebResponse)serverRequest.EndGetResponse(asyncResult); 
     if (serverState != null) 
     { 
      Stream stream = serverState.AsyncResponse.GetResponseStream(); 
      if (stream != null && serverState.AsyncResponse.StatusCode == HttpStatusCode.OK) 
      { 
       Deployment.Current.Dispatcher.BeginInvoke(() => 
       { 
        DownloadStatus = DownloadState.FileReady; 
        if (serverState != null) 
        { 
         try 
         { 
          if (offlineStream.Contains("streamOffline")) 
          { 
           offlineStream["streamOffline"] = null; 
           offlineStream.Remove("streamOffline"); 
          } 
          offlineStream.Add("streamOffline", stream); 


          if (onComplete != null) 
           onComplete.Invoke(this, DownloadStatus, IndexImg); 
          stream.Close(); 
          stream.Dispose(); 
          stream = null; 
         } 
         catch (Exception) 
         { } 
        } 
       }); 
      } 
     } 
    } 
    catch (WebException ex) 
    { 
     DownloadStatus = DownloadState.Error; 
     Deployment.Current.Dispatcher.BeginInvoke(() => 
     { 
      //if (onComplete != null) 
      // onComplete.Invoke(this, DownloadStatus, null, IndexImg); 
     }); 
    } 
    catch (Exception) 
    { } 
    finally 
    { 
     serverRequest = null; 
    } 
} 
#endregion 

は私がメモリを増やすことができますすべてのものを破壊したと思ったが、メモリはまだアップし、非常に高いですが、私は保存されましたIsostorageストリームに入りますが、それでも減少しません。

+1

なぜ空のキャッチブロックを使用しますか?あなたは例外を飲みます、多分問題があります –

+0

@lukas!ありがとうございました !私はそれを見直すだろうが、私はそれをダウンロードするとメモリが増強される理由は、すべてをキャンセルする必要があった – thongaduka

答えて

0

オブジェクトを配置する瞬間に.NETメモリが減少しません。 GCが次回に起動すると、ダウンするでしょう。

読むより上... http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

はどのようにメモリが高いと判断していますか?

関連する問題