首页 / C# / c# – 导出大量数据
c# – 导出大量数据
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 导出大量数据,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2024字,纯文字阅读大概需要3分钟。
内容图文
![c# – 导出大量数据](/upload/InfoBanner/zyjiaocheng/784/4fc5ac2ce4a044e3b9a40d11bb302625.jpg)
这是我的问题..
我们的网站有两种类型的报告,网格中显示的数据和作为报告即时下载的数据.
这些报告可能包含几年的数据(100万行),我们一直允许客户在日期范围内下载数据,但我们已开始限制他们查看数据的时间,以防止我们网站出现性能问题.然而,即使在较小的日期范围内,数据仍然变得非常大,现在它们正在扩展,如果它们下载太多,我们的内存会因为几次演出而耗尽并且耗尽内存.
我的问题是,我宁愿不限制他们的数据,所以我试图找出一个很好的解决方案,允许他们尽可能多地下载.
我可以通过仅返回每页数据来限制他们看到的内容,因此没有性能问题,但下载始终是问题所在.
我已经研究过异步,但是还没有成功地将其工作,因为当我加载数据时它会激活内存.
想法?思考?建议?
代码示例:
// Get Data SqlConnection con = new SqlConnection(); SqlCommand cmd = new SqlCommand(); SqlDataAdapter da; DataSet ds = new DataSet(); con.ConnectionString = "MyConnectionString"; con.Open(); cmd.Connection = con; cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = "MyStoredProc"; da = new SqlDataAdapter(cmd); da.Fill(ds); con.Close(); StringWriter sw = new StringWriter(); HtmlTextWriter htw = new HtmlTextWriter(sw); DataGrid dg = new DataGrid(); dg.DataSource = ds.Tables[0]; dg.DataBind(); dg.RenderControl(htw); Response.ClearContent(); Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", "attachment;filename=Report.xls"); Response.Write(sw.ToString()); Response.End();
当我使用我的数据运行时…这大约是800k行,我的内存出现峰值并且出现内存不足错误,并且使事情变得更糟……它总是在RenderControl上占用,直到完成
解决方法:
我假设数据来自后端数据库.如果是这样,您不应让用户等待此操作完成.这是一个糟糕的UI设计,特别是当内存可以达到4GB.
我同意其他建议,您应该考虑改进代码和设计,以帮助减少占用空间.但无论如何,你应该有类似预定的工作架构.
您允许用户在搜索/文件上下载,并将其添加到数据库表中的队列中.有一个db / .net进程,它会处理这些作业并在服务器上以适当的格式生成一个文件.如果数据相同并且您使用正确的命名约定,则可以在多个用户之间重用该文件.然后,用户应该能够进入下载队列页面并查看他已安排的所有下载.完成后,他将能够下载该文件.
如果您的要求不允许您这样做,请发表评论解释.
内容总结
以上是互联网集市为您收集整理的c# – 导出大量数据全部内容,希望文章能够帮你解决c# – 导出大量数据所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。