将巨大的动态数据导出到csv.csv的百万条记录

Edu*_*elo -1 c# linq-to-entities entity-framework export-to-csv asp.net-mvc-4

我们正在测试我们的应用程序的功能,这里是场景,我们有一个包含500万条记录的表,我们想将它导出到csv,所以我们成功地创建了一个csv编写器类.主要问题是当我们导出整个记录时,我们捕获OOM异常(内存不足异常),当数据超过一百万时,用户可以选择要导出哪些列更难以实现..是否存在没有阻塞过程的任何方式来抓住好东西 什么类型的过程最适合这种情况??? 我应该使用(以及如何)使用后台进程吗?

任何观点(例子)都很受欢迎.谢谢...

小智 5

这么短的描述很难回答.根据您的标签; 它似乎是一个基于ASP.NET MVC4的网站.似乎也是; 您正在尝试即时创建CSV.(即在单个http调用中)我个人更喜欢基于AJAX的解决方案,其序列如下.

  1. 用户启动导出.
  2. 服务器接收导出请求并启动后台作业以创建CSV文件.(可能在不同的过程中)并返回说明作业已开始的状态(带有作业ID).
  3. 实施一种机制来监控这项工作.可能有关于作业状态和进度的DB条目.
  4. 在前端,定期的AJAX调用检查作业状态; 并向用户显示进度.
  5. 一旦工作完成; 提供下载链接供用户下载您的大文件.

适当实施; 这种方法有以下好处.

  • 它是非阻塞和交互式的.
  • 它可以处理真正庞大的工作.
  • 用户有机会取消该作业.
  • 每个工作都在一个单独的过程中运行 赋予它自己的记忆空间.
  • 它可以扩展到多个服务器.

虽然你可以看到; 它有它自己的开销.