मैं डेटाबेस से डेटा को एक्सेल फ़ाइल में भेजने के लिए प्रोग्राम का उपयोग कर रहा हूं। यह शुरुआत में ठीक काम करता है और फिर धीरे-धीरे धीरे-धीरे हो जाता है, अंततः यह स्मृति से बाहर चला जाता है और निम्न त्रुटि ocurrs: "java.lang.OutOfMemoryError: जावा हीप स्पेस ..."।मेरा प्रोग्राम धीमा और धीमा क्यों हो रहा है?
समस्या जेवीएम ढेर sapce जोड़कर हल किया जा सकता है। लेकिन सवाल यह है कि यह कार्यक्रम चलाने के लिए बहुत अधिक समय बिताता है।
कई मिनटों के बाद, यह 4 सेकंड के साथ एक लूप समाप्त हुआ जिसे शुरुआत में 0.5 सेकंड के साथ समाप्त किया जा सकता है। मुझे हमेशा एक निश्चित गति में चलाने के लिए एक समाधान नहीं मिला है।
क्या यह मेरी कोड समस्या है?
इस पर कोई संकेत?
public void addAnswerRow(List<FinalUsers> finalUsersList,WritableWorkbook book){
if (finalUsersList.size() >0) {
try {
WritableSheet sheet = book.createSheet("Answer", 0);
int colCount = 0;
sheet.addCell(new Label(colCount++,0,"Number"));
sheet.addCell(new Label(colCount++,0,"SchoolNumber"));
sheet.addCell(new Label(colCount++,0,"District"));
sheet.addCell(new Label(colCount++,0,"SchoolName"));
sheet.setColumnView(1, 15);
sheet.setColumnView(3, 25);
List<Elements> elementsList = this.elementsManager.getObjectElementsByEduTypeAndQuestionnaireType(finalUsersList.get(0).getEducationType().getId(), this.getQuestionnaireByFinalUsersType(finalUsersList.get(0).getFinalUsersType().getId()));
Collections.sort(elementsList, new Comparator<Elements>(){
public int compare(Elements o1, Elements o2) {
for(int i=0; i< (o1.getItemNO().length()>o2.getItemNO().length()? o2.getItemNO().length(): o1.getItemNO().length());i++){
if (CommonFun.isNumberic(o1.getItemNO().substring(0, o1.getItemNO().length()>3? 4: o1.getItemNO().length()-1)) && !CommonFun.isNumberic(o2.getItemNO().substring(0, o2.getItemNO().length()>3? 4: o2.getItemNO().length()-1))){
return 1;
}
if (!CommonFun.isNumberic(o1.getItemNO().substring(0, o1.getItemNO().length()>3? 4: o1.getItemNO().length()-1)) && CommonFun.isNumberic(o2.getItemNO().substring(0,o2.getItemNO().length()>3? 4:o2.getItemNO().length()-1))){
return -1;
}
if (o1.getItemNO().charAt(i)!=o2.getItemNO().charAt(i)){
return o1.getItemNO().charAt(i)-o2.getItemNO().charAt(i);
}
}
return o1.getItemNO().length()> o2.getItemNO().length()? 1:-1;
}});
for (Elements elements : elementsList){
sheet.addCell(new Label(colCount++,0,this.getTitlePre(finalUsersList.get(0).getFinalUsersType().getId(), finalUsersList.get(0).getEducationType().getId())+elements.getItemNO()+elements.getItem().getStem()));
}
int sheetRowCount =1;
int sheetColCount =0;
for(FinalUsers finalUsers : finalUsersList){
sheetColCount =0;
sheet.addCell(new Label(sheetColCount++,sheetRowCount,String.valueOf(sheetRowCount)));
sheet.addCell(new Label(sheetColCount++,sheetRowCount,finalUsers.getSchool().getSchoolNumber()));
sheet.addCell(new Label(sheetColCount++,sheetRowCount,finalUsers.getSchool().getDistrict().getDistrictNumber().toString().trim()));
sheet.addCell(new Label(sheetColCount++,sheetRowCount,finalUsers.getSchool().getName()));
List<AnswerLog> answerLogList = this.answerLogManager.getAnswerLogByFinalUsers(finalUsers.getId());
Map<String,String> answerMap = new HashMap<String,String>();
for(AnswerLog answerLog :answerLogList){
if (answerLog.getOptionsId() != null)
{
answerMap.put(answerLog.getElement().getItemNO(), this.getOptionsAnswer(answerLog.getOptionsId()));
}else if (answerLog.getBlanks()!= null){
answerMap.put(answerLog.getElement().getItemNO(), answerLog.getBlanks());
}else{
answerMap.put(answerLog.getElement().getItemNO(), answerLog.getSubjectiveItemContent());
}
}
for (Elements elements : elementsList){
sheet.addCell(new Label(sheetColCount++,sheetRowCount,null==answerMap.get(elements.getItemNO())?"0":answerMap.get(elements.getItemNO())));
}
sheetRowCount++;
}
book.write();
book.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RowsExceededException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (WriteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
आप विस्तार से समझाने के लिए उदाहरण के लिए .., "मैं दो चादरें दोनों एक आम कुंजी है ले रहा हूँ की जरूरत नहीं है (नीचे टिप्पणी से जारी) (studentId या कुछ ??) और उनसे जुड़ना "या कुछ। फिर हम डिस्क स्पेस का उपयोग करके पहले इन चादरों को सॉर्ट करने के लिए मर्ज-सॉर्ट का उपयोग करने की सलाह दे सकते हैं, और फिर आप मेमोरी के गुच्छा के बिना दोनों शीट के माध्यम से पुन: सक्रिय कर सकते हैं ... –