2 sinat 33415638 sinat_33415638 于 2016.03.30 17:36 提问

poi处理excel大数据量的导入会报内存溢出

XSSFWorkbook workbook = new XSSFWorkbook(new FileInputStream(fileName()));
就是单独执行这行代码都不行,报内存溢出,我把虚拟机都设置成最大了也溢出
差不多10万行吧

3个回答

daidaineteasy
daidaineteasy   Ds   Rxr 2016.03.30 19:06

LZ可以试试分批处理,如下,当list中接收到的数据到1W条后,就先去去保存到数据库中,
同时将list清空,等待接收接下来的内容,直到将数据接收完毕

     while(判断excel文件中是否还有信息){
        list.add(XXX);
        num ++;
        if(num >= 10000){
        执行导入操作,同时将list清空,将num置为0
        }
    }

    if(null != list && list.size() > 0){
        执行导入操作,同时将list清空(这是对剩余数据的操作)
    }
sinat_33415638
sinat_33415638 一般涉及到求和的地方都会这么大数据量,其实输出也就10几行
一年多之前 回复
daidaineteasy
daidaineteasy 回复sinat_33415638: 要不,直接把10W条记录一次性的加载到虚拟机的内存中,很容易内存溢出。
一年多之前 回复
daidaineteasy
daidaineteasy 回复sinat_33415638: 那你是需要显示到页面上么,如果显示的话,可以做一个类似分页的功能,就把excel当成数据库,通过分页的方式从excel中查询数据进行展示。
一年多之前 回复
sinat_33415638
sinat_33415638 我这个没有涉及到数据库,我都是直接从表进行操作的
一年多之前 回复
sinat_33415638
sinat_33415638 我这个没有涉及到数据库,我都是直接从表进行操作的
一年多之前 回复
CSDNXIAOD
CSDNXIAOD   2016.03.30 17:42

poi大数据量excel导入
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

wojiushiwo945you
wojiushiwo945you   Ds   Rxr 2016.03.30 18:45

可以参考这:poi的eventmodel写的大数据量的excel的读取程序。
http://gaosheng08.iteye.com/blog/624758
或者换一种excel操作工具jxf。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!