Загрузите изображение, используя наименьшее количество памяти

Я разрабатываю приложение для WP8. В ScheduledTaskAgent Мне нужно загрузить изображение из Интернета, сохранить его в хранилище, после чего я загружаю то же изображение и выполняю некоторую обработку. Я сталкиваюсь с ужасом OutOfMemoryException, Если я уберу часть "загрузить и сохранить изображение" (используя уже сохраненное изображение), все будет работать. Если я просто скачаю и сохраню, все будет работать. Может быть, в первом расписании я могу сохранить его, во втором процессе. Но я не понимаю, где или почему мое загрузочное изображение хранит память, так что, может кто-нибудь предложить мне лучший способ сделать это? Вот мой фактический код:

    private async Task GetImage(string url)
    {
        using (var http = new HttpClient())
        {
            var clientResponse = await http.GetByteArrayAsync(url);

            var file = await ApplicationData.Current.LocalFolder.CreateFileAsync(lockFilename, Windows.Storage.CreationCollisionOption.ReplaceExisting);
            using (var fs = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite))
            {
                var outStream = fs.GetOutputStreamAt(0);
                using (var dataWriter = new Windows.Storage.Streams.DataWriter(outStream))
                {
                    dataWriter.WriteBytes(clientResponse);
                    await dataWriter.StoreAsync();
                    dataWriter.DetachStream();
                    await outStream.FlushAsync();
                    outStream.Dispose(); 
                    fs.Dispose();
                }
            }
        }
    }

1 ответ

Используя HttpClient.GetStreamAsync, вы получите доступ непосредственно к сетевому потоку и сможете скопировать этот поток в файловый поток. Это должно уменьшить потребление памяти.

Другие вопросы по тегам