我正在寻求有关生成CSV报告的建议。
我有一个ASP.NET应用程序,可以生成有关结算数据的报告。最近,我注意到当它尝试导出报告文件时,Web应用程序没有响应,并且会抛出OutOfMemory异常或服务器超时异常。
我做的修改是:
我还想过限制从数据库返回的最大记录数,但系统需要生成所有信息,无论rowcount返回多大,因为下载的信息对我们客户的财务记录至关重要。
我想知道,可以使用哪些方法/解决方案来呈现在ASP.NET中拥有大量数据的CSV报告?
期待您的回复。
干杯, 安
答案 0 :(得分:2)
要解决服务器超时异常,我会尝试异步生成报告。因此,当您的应用程序收到生成报告的请求时,它应该启动另一个执行生成的线程并立即返回请求。
然后,您需要另一个页面,让访问者在生成报告后接收报告。
这一切都涉及到应用程序中的更多工作,当然要记录正在生成的报告,并在完成时将它们标记为生成。
至于内存不足异常 - 这是您生成报告的方式所特有的。除非你真的做了一些非常疯狂的事情,否则很少会出现内存异常 - 所以你在CSV生成中消耗了大量内存 - 例如创建大量的字符串对象?确保您使用的是StringBuilder,或者更好的方法是将输出直接流式传输到文件中。
最后提示 - 如果您要提供这样的大文件,请确保在IIS配置中为这些文件类型启用了GZIP或DEFLATE压缩。这将大大减少要交付给客户端的包的大小 - 但是需要花费一些处理时间。
答案 1 :(得分:1)
我想知道,可以使用哪些方法/解决方案来呈现在ASP.NET中拥有大量数据的CSV报告?
最好的方法是不在ASP.NET中执行此操作。您需要一个单独的进程,至少在ASP应用程序中的一个线程中,但最好卸载到另一个服务器/服务。
答案 2 :(得分:1)
预渲染它们并将它们下载为URI \ files。我发现渲染像这样的大文件需要不在常规Click&等待页面渲染并返回。或者如果它们必须是onclick,那么像开始的Ajax和确定完成百分比的偶然查询要好得多,当100%然后你释放URI。