Windows phone 7 如何克服使用HttpWebRequest下载时内存过高的问题

Windows phone 7 如何克服使用HttpWebRequest下载时内存过高的问题,windows-phone-7,Windows Phone 7,在我的项目中,我使用HttpWebRequest下载提要。但当我下载时,当它们返回到以前的形式时,内存会增加而不是减少: #region RequestDataFromServer private void RequestDataFromServer(object o) { if (!string.IsNullOrEmpty(ServerUri)) { if (DownloadStatus == DownloadState.Downloading)

在我的项目中,我使用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流,但它仍然没有减少。NET内存在您处理对象时不会减少。下次GC启动时,它会下降

阅读更多关于


如何确定内存高?

为什么使用空的catch块?你吞下例外,也许有一个problem@lukas ! 非常感谢!我将回顾它,但为什么当我下载它时内存会增强,尽管我不得不取消所有操作