最近公司的员工管理系统在导出所有员工(包括已经离职的)信息的时候总是只能导出一部分,只有九千多条,而数据库中有一万多条数据,导出少量数据时不会发生这个问题,上网查了一下初步判断是内存溢出问题,查看了其源代码,使用的是jxl导出,有点庆幸自己的项目中用的是poi,试过了一万多条数据根本没影响,可就在我导出十几万条数据时问题出来了,也报了内存溢出,这时想起前面看过的一个论坛帖,解决办法似乎是在创建workbook时给构造函数传值的方发控制缓存大小来解决这个问题,可是我使用
XSSFWorkbook(100)时却报错,说是没有这个构造函数,于是乎查看了poi的API文档,org.apache.poi.ss.usermodel
Interface Workbook
- All Known Implementing Classes:
- HSSFWorkbook, SXSSFWorkbook, XSSFWorkbook
Streaming version of XSSFWorkbook implementing the "BigGridDemo" strategy.
而且里面有我需要的需要一个整型参数的构造函数,而XSSFWorkbook中则没有
SXSSFWorkbook(int rowAccessWindowSize)
Construct an empty workbook and specify the window for row access.二话不说,new了一个试了一下,居然成功了,导出了二十多万条数据也没有问题,不过时间有点长,后来百度后发现,这个东东只能用来写,不能用来读,而且只能是excel2007格式的,而且是3.8版本中新加上去的。
评论