Máme požiadavku, kde musíme získať súbor xlsx z databázy a pridať k nemu ďalšie 4 hárky.
Napísal som nasledujúci kód, aby som to dosiahol.
Kód:
OPCPackage opcPackage=OPCPackage.open(tempExcelFile);
XSSFWorkbook xworkbook=new XSSFWorkbook(opcPackage);
SXSSFWorkbook dbWorkBook = new SXSSFWorkbook(xworkbook, ApplicationConstants.FLUSH_LIMIT);
// add sheets to dbworkBook
Teraz je veľkosť súboru programu Excel v databáze približne 10 MB a na OOM sa zobrazuje výnimka OOM
XSSFWorkbook xworkbook=new XSSFWorkbook(opcPackage);
Moje nastavenia pamäte sú -Xms512m -Xmx1024m
a nemôžem zmeniť toto číslo. Videl som nejaké riešenia, kde API udalostí bol požiadaný o použitie na vyriešenie problému s pamäťou
Moja otázka je, aj keď na čítanie riadkov používam api udalosti. Ako ich môžem zapísať späť do a SXSSFWorkbook
objekt, aby som k nemu mohol pridať ďalšie 4 hárky.
odpovede:
0 pre odpoveď č. 1Váš vlastný problém tu je, že stepráca s veľmi veľkými excelentnými dokumentmi s veľmi malým množstvom pamäte. Chvíľu som pracoval na analýze dokumentov xlsx a môžu analyzovať obrovské množstvo pamäte. Očakával by som, že súbor 10 MB xlsx bude vyžadovať niekde v balíku s pamäťou 1,5 - 2,5 GB, keď sa zabalí do pamäte.
Ste narazili na zásadný probléms formátom xlsx (ktorý, v prípade, že nevieš, je v podstate iba zväzkom dokumentov XML so zipsom). Pokiaľ nemáte veľa koncertov, ktoré by si mali zahrať, naozaj vám nemôžem odporučiť pokúsiť sa otvoriť xlsx. súbor> 2 MB.