как побороть большой объем памяти при использовании HttpWebRequest для загрузки - PullRequest
0 голосов
/ 09 декабря 2011

В моем проекте я использую HttpWebRequest для загрузки Feed.Но когда я загружаю, память увеличивается, а не уменьшается, когда они возвращаются к предыдущей форме:

#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 Stream, в который я попал, но он все равно не уменьшает

1 Ответ

0 голосов
/ 09 декабря 2011

В памяти .NET не уменьшается в тот момент, когда вы располагаете объект. Он погаснет, когда ГК загорится в следующий раз.

Подробнее о ... http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

Как вы определяете, что объем памяти велик?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...