/ / XSSFWorkbook मेमोरी इश्यू - जावा, एक्सेल, मेमोरी, आउट

XSSFWorkbook मेमोरी इश्यू - जावा, एक्सेल, मेमोरी, आउट

हमारे पास एक आवश्यकता है जहां हमें डेटाबेस से xlsx फ़ाइल प्राप्त करना है और इसमें 4 और शीट जोड़ना है।

उसी को पूरा करने के लिए मैंने नीचे कोड लिखा है।

संहिता:

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

अब डेटाबेस में एक्सेल फ़ाइल का आकार लगभग 10Mb है और मुझे इसमें OOM अपवाद मिल रहा है

XSSFWorkbook xworkbook=new XSSFWorkbook(opcPackage);

मेरी मेमोरी सेटिंग्स हैं -Xms512m -Xmx1024m और मैं यह संख्या नहीं बदल सकता। मैंने कुछ समाधान देखे हैं जहां ईवेंट एपीआई को स्मृति समस्या को हल करने के लिए उपयोग करने के लिए कहा गया है

मेरा सवाल यहां तक ​​है कि अगर मैं पंक्तियों को पढ़ने के लिए ईवेंट एपीआई का उपयोग करता हूं, तो मैं इसे वापस कैसे लिख सकता हूं SXSSFWorkbook ऑब्जेक्ट ताकि मैं इसमें 4 और शीट जोड़ सकूं।

उत्तर:

जवाब के लिए 0 № 1

यहां आपकी अंतर्निहित समस्या यह है कि आप हैंबहुत बड़ी एक्सेल दस्तावेजों के साथ बहुत कम मात्रा में मेमोरी के साथ काम करना। मैंने कुछ समय के लिए xlsx दस्तावेजों को पार्स करने पर काम किया और वे पार्स करने के लिए जबरदस्त मात्रा में मेमोरी ले सकते हैं। मैं एक 10 एमबी xlsx फ़ाइल की आवश्यकता होगी जब स्मृति में अनपैक्ड 1.5 - 2.5 जीबी मेमोरी के बॉलपार्क में कहीं आवश्यकता होगी।

आप एक मूलभूत समस्या के खिलाफ चल रहे हैंxlsx प्रारूप के साथ (जो, यदि आपको पता नहीं है, तो यह मूल रूप से ज़िपित XML दस्तावेज़ों का एक गुच्छा है) जब तक कि आपके पास आसपास खेलने के लिए स्मृति के लायक कई गिग्स न हों, मैं वास्तव में "xlsx खोलने की कोशिश करने की सलाह नहीं दे सकता।" फ़ाइल> 2 एमबी।