HEERY 2007-05-10
最近需要往Excel写入海量数据,大约10W笔左右(超过6万会新建一个sheet再写)
开始使用POI的包,写1W笔左右就outofmemory了
后来换用jxl,写1.8w笔左右报outofmemory
(我机器配置Pentium(R)D3GHZ,双核,内存1G)
考虑到分批次写是否会好一些,每次先把数据写到一个临时文件,然后关闭流
再将临时文件读入后再往里写,可是发现这样还是不行
用jprofiler看了看内存使用状况,发现其实数据本身占空间并不是很大,而是每
一个cell会产生很多相关的对象(不管是POI还是jxl,jxl资源释放会快一些),
这些对象比数据本身占的空间要大得多,更郁闷的是即便是读入一个Excel文件,
也会为有值得cell自动产生这些对象
所以分批次写也行不通,因为中间产生的临时文件读入进来也可能耗光内存
现在能想到的解决方案:1.加内存,客户不乐意
2.替换成csv格式的文本,客户说这样产生文件数量太多也不乐意
不知各位还有什么高见?
谢谢