2017-08-18 62 views
0

私はAndroidでのプログラミングにかなり慣れていて、現在読んでいるプログラムでは、現在30枚の読み込みとExcelファイルを手助けしています。 HSSFWorkbookがファイルを読み込むと、アプリが実行を継続するまでに10〜20秒かかります。これを改善できる方法はありますか?各シートは40行13列を含む。私は現在、特定のシートを一度に1つ探すので、後の呼び出しまで残りは必要ありません。それがメモリに全体のフットプリントを保存しないように私はあなたが代わりにSXSSFWorkbookを使用して試すことができますjavax.xml.streamHSSFWorkbookの読み込みパフォーマンスが遅い

HSSFWorkbook wb = new HSSFWorkbook(pfile); 

     trimDate(); 
     HSSFSheet sheet; 
     sheetD = wb.getSheetIndex(finalDate); 
     sheet = wb.getSheetAt(sheetD); 
     FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator(); 
     // TODO: 8/16/2017 remove try when current Excel File is used 
     Row row = null; 
     try{row = sheet.getRow(2);} 
     catch (NullPointerException e){ 
      error(); 
      e.printStackTrace(); 
      return; 
     } 
     Cell cell = row.getCell(11); 
     TextView pt = (TextView) findViewById(R.id.period_total); 
     CellValue cellValue = evaluator.evaluate(cell); 
+0

[このPOIの質問とメモリとパフォーマンス](http://poi.apache.org/faq.html#faq-N10165)を読んでお試しになりましたか? – Gagravarr

答えて

0

のいずれかによる問題にXSSFを使用傾ける

が、それは大規模なExcelシートで正常に動作します。それのHere'sドキュメント:

SXSSF 非常に大きなスプレッドシートを作成する必要があるときに使用するXSSFのAPIと互換性のあるストリーミング拡張機能であり、およびヒープ領域は 限られています。 SXSSFは、スライディングウィンドウ内にある行を へのアクセスを制限することによってメモリの占有量を抑え、XSSFはドキュメント内のすべての行 にアクセスします。ウィンドウ内に存在しなくなった古い行 は、ディスクに書き込まれるとアクセス不能になります。

これはファイル全体をメモリに保存しないため、内容を読み込んだ後に前の行に戻れないため、ロジックを少し微調整する必要があります。

Hereは、SXSSFWorkbookでファイルを読み取る例です。

+0

私はまだXSSFを動かすことができませんでした。私はjavax.xml.streamのクラスエラーが発生しました 既に使用されているjreの一部ですが、私はまだ理解していない理由で実装できません –

関連する問題