2014-04-11 108 views
0

我們有一個要求,我們必須從數據庫獲取一個xlsx文件並向其中添加4張表。XSSFWorkbook內存問題

我已經寫了下面的代碼來完成相同的。

代碼:

OPCPackage opcPackage=OPCPackage.open(tempExcelFile); 
XSSFWorkbook xworkbook=new XSSFWorkbook(opcPackage);  
SXSSFWorkbook dbWorkBook = new SXSSFWorkbook(xworkbook, ApplicationConstants.FLUSH_LIMIT); 
    // add sheets to dbworkBook 

現在Excel文件的數據庫大小爲10MB左右,我在

XSSFWorkbook xworkbook=new XSSFWorkbook(opcPackage);  

收到一個OOM例外我的內存設置-Xms512m -Xmx1024m和我不能改變這個號碼。我已經看到了一些解決方案,其中事件API has been asked to be used to solve the memory issue

我的問題是即使我使用事件api讀取行,我如何將它重新寫入SXSSFWorkbook對象,以便我可以添加4張表。

+0

你應該發佈你的mem out stacktrace。異常 –

+0

堆棧跟蹤如下: – user3487820

回答

0

你與生俱來這裏的問題是,你是用的內存非常小的量非常大的Excel文檔工作。我一直在解析xlsx文檔,他們可以花費大量的內存來解析。我希望一個10 MB的xlsx文件在內存中解壓縮時需要1.5-2.5GB內存的大小。

你對與XLSX格式的根本問題跑起來(其中,如果你不知道,基本上只是一堆壓縮XML文檔)。除非你有很多值得玩的內存,否則我真的不能建議打開一個xlsx文件> 2 MB。