我正在为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();
}
}
}
}
答案 0 :(得分:0)
通过使用HttpClient.GetStreamAsync,您可以直接访问网络流,并可以将该流复制到文件流。这应该会减少内存消耗。