我需要创建一个操作,将我的数据库中的某些记录作为文本文件下载。下面的代码适用于玩具示例(很少记录)。当这段代码被推送到生产环境时,结果发现我的内存不足。我处理的数据量是 Gbs 的顺序
public FileResult Streammer()
{
MemoryStream file = new MemoryStream();
using (var db = new DbMapper())
{
while (true)
{
List<Record> records = db.GetNext(10000);
if (records == null)
break;
foreach (Record r in records)
{
byte[] data = r.GetBytes();
file.Write(data, 0, data.Length);
}
}
}
file.Position = 0;
return new FileStreamResult(file, "text") { FileDownloadName = "junk.txt" };
}
理想情况下,我想从服务器上的数据库中读取大块记录。读取单个块时,它会立即转换并流式传输到客户端。客户端会显示一个标准的下载指示器,而不实际指示剩余时间/大小。
任何建议将不胜感激。