我正在寻找一种在没有内存流的情况下将文件存储在zip文件中的方法。我的目标是节省最多的系统内存,而直接磁盘IO没问题。 我迭代了一个数据库结果集,我收集了一些blob。这些是字节数组。
我在下面做了什么(System.IO.Compression):
using (var archive = ZipFile.Open("data.zip", ZipArchiveMode.Update))
{
foreach (var result in results)
{
string fileName = $"{result.Id}.bin";
using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
// write the blob data from result.Value
fileStream.Write(result.Value, 0, result.Value.Length);
fileStream.Close();
}
archive.CreateEntryFromFile(fileName, fileName);
}
}
此实施有两个问题。
有没有办法彻底禁止记忆?
更新:
我想要实现的是生成一个ZIP文件,其中包含从数据库blob生成的单个二进制文件。这应该发生在ASP.NET Web API控制器中。用户可以请求数据,但不是在HTTP响应中发送整个数据,而是在请求时生成ZIP文件,将其保存到本地文件服务器并将下载链接发送回用户。
答案 0 :(得分:-1)
我认为您的> 100 MB来自
results
对象最小化工作进程的RAM量:
create empty zip-file
do {
(single BLOB query from DB)
(write blob to new or overwrite File)
(open zip file for append)
(append file to zip)
(close and dispose **both** file handles / objects )
}