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

时间:2013-09-17 21:27:04

标签: c# asp.net-mvc

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

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

非常感谢任何建议。

1 个答案:

答案 0 :(得分:0)

您最好的选择可能是为您的数据库创建一个从流继承并覆盖Read方法的包装器。然后FileStream对象将从您的代码中提取数据。您可以实现某种分页逻辑,这样就不会一次性加载数据库中的数据。