需要通过 Web 服务从数据库下载大量数据

本文关键字:下载 数据库 数据 服务 Web | 更新日期: 2023-09-27 18:31:54

我需要创建一个操作,将数据库中的某些记录下载为文本文件。下面的代码适用于玩具示例(很少记录)。当这段代码被推送到生产环境时,结果证明我的内存不足。我处理的数据量按 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" };
    }

理想情况下,我想从服务器上的数据库中读取记录块。当读取单个块时,它会立即转换并流式传输到客户端。客户端将显示标准下载指示器,而不实际指示剩余时间/大小。

任何建议将不胜感激。

需要通过 Web 服务从数据库下载大量数据

最好的

办法可能是为数据库创建一个包装器,该包装器继承自 stream 并重写 Read 方法。然后,FileStream 对象将从您的代码中提取数据。您可以实现某种分页逻辑,这样您就不会一次从数据库加载所有数据。