【发布时间】:2022-01-06 10:00:59
【问题描述】:
我会尽量保持简短和准确。
要求:
从第 3 方下载大型 (400mb) xml 响应并以 ZipArchive 的形式存储在磁盘上。
当前解决方案:
using (var memoryStream = new MemoryStream())
{
using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
{
var file = archive.CreateEntry($"{deliveryDate:yyyyMMdd}.xml");
using(var entryStream = file.Open())
{
using (var payload = new MemoryStream())
{
using var response = await _httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead);
response.EnsureSuccessStatusCode();
await response.Content.CopyToAsync(payload);
payload.Seek(0, SeekOrigin.Begin);
await payload.CopyToAsync(entryStream);
}
}
}
using (var fileStream = new FileStream(Path.Combine(filePath), FileMode.Create, FileAccess.Write, FileShare.None))
{
memoryStream.Seek(0, SeekOrigin.Begin);
await memoryStream.CopyToAsync(fileStream);
}
}
其他信息:
我可以将一个 400mb 的文件压缩到大约。 20mb 大约 40 秒。 1/4 是下载 3/4 是压缩。 httpClient 被重用。 该代码在一个长期存在的应用程序中运行,该应用程序作为 k8 linux pod 托管。
当前解决方案存在的问题:
我不明白这个实现是否会自行清理。我将感谢您指出潜在的泄漏。
【问题讨论】: