我刚刚创建了报告项目。
但是我发现问题,当我导出有许多复杂和非常高的记录(1-10M记录)的报告时,我的服务器有非常高的内存负载(16GB+)。
我的流程。1. 使用linq to sql查询数据库并将其存储在datatable中。2. 然后用openxml导出datatable到excel。
我已经研究了一些,并找到了解决方案,切片数据表和导出到几个工作表在excel中。
但我认为那不是我真正的目标。我的问题是如何解决数据高内存问题?
谢谢。
没有理由选择中间的DataTable
。只是流数据从IQueryable
直接到您的OpenXML库(即使用foreach
上的Linq查询结果,并将每一行推入您的库,或手动编写)。
如果必须存储它,请使用合适的类。DataTable
s在内部存储为object
的数组列表,因此将所有值类型装箱(这会影响性能和内存使用)。