스터디 용 블로그
POI HSSF, XSSF, SXSSF 성능 분석 본문
반응형
성능 분석이라고는 썻지만 그정도는 아니고, 이번 업무로 기존 Jxl을 사용하던 방식에서 POI로 변환하는 부분인데, 겨우 9천건 ~ 3만건정도인데 너무 느리기에 이를 개선하는 업무였다.
따라서, 자연스럽게 엑셀 생성의 핵심인 Workbook에 대해 알아보자!!
Workbook의 종류로는 엑셀 97~2003버전인 HSSF , 엑셀 2007이상의 XSSF, 가장 최근에 나온 성능개선버전의 SXSSF...
결론부터 말하자면, "고전만큼 좋은게 없다"
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | public class test { private Sheet s; public static final int HSSF = 0 ; public static final int XSSF = 1 ; public static final int SXSSF = 2 ; private Workbook wb; public test( int type) { // TODO 자동 생성된 생성자 스텁 switch (type){ case HSSF : wb = new HSSFWorkbook(); break ; case XSSF : wb = new XSSFWorkbook(); break ; case SXSSF : wb = new SXSSFWorkbook(- 1 ); break ; } } public Row getRow( int i){ Row r = s.getRow(i); if (r== null ) r = s.createRow(i); return r; } public Cell getCell( int row, int cell){ Row r = getRow(row); Cell c = r.getCell(cell); if (c== null ) c = r.createCell(cell); return c; } public void setCellValue( int row, int cell, String cellvalue){ Cell c = getCell(row,cell); c.setCellValue(cellvalue); } public void writeWorkbook(String fileName){ long start = System.currentTimeMillis(); try { s = wb.createSheet( "sample Sheet" ); for ( int i= 0 ;i< 10000 ;i++){ setCellValue(i, 0 , "Test_Title_" +i); setCellValue(i, 1 , "Test_Title_" +i); setCellValue(i, 2 , "Test_Title_" +i); setCellValue(i, 3 , "Test_Title_" +i); setCellValue(i, 4 , "Test_Title_" +i); setCellValue(i, 5 , "Test_Title_" +i); setCellValue(i, 6 , "Test_Title_" +i); setCellValue(i, 7 , "Test_Title_" +i); setCellValue(i, 8 , "Test_Title_" +i); setCellValue(i, 9 , "Test_Title_" +i); setCellValue(i, 10 , "Test_Title_" +i); } wb.write( new FileOutputStream(fileName)); } catch (Exception e){ e.printStackTrace(); System.err.println(e.getMessage()); } long end = System.currentTimeMillis(); System.out.println( "writeHSSFWorkbook : " +(end-start)); } /** * @param args */ public static void main(String[] args) { // TODO 자동 생성된 메소드 스텁 test hssf = new test(test.HSSF); hssf.writeWorkbook( "hssf-sample.xls" ); test xssf = new test(test.XSSF); xssf.writeWorkbook( "xssf-sample.xls" ); test sxssf = new test(test.SXSSF); sxssf.writeWorkbook( "sxssf-sample.xls" ); } } |
못믿겠다면 결과를 보자..
대략 3만건의 데이터를 만드는 소요 시간을 계산해보았당..
보다 싶이 HSSF와 SXSSF의 경우 속도가 괜찮지만....XSSF........
선택은 본인들이...
ps. SXSSF를 사용하게 될 경우, 생각보다 많은 의존성이 필요하다...(최소 이정도의 xml관련 Lib가 필요하다..)
HSSF 쓸 경우, poi-3.9....jar만 있음됨.
poi-ooxml-schemas-3.9-20121203.jar
poi-scratchpad-3.9-20121203.jar
그리고 한가지더!!
만약 jdk 1.5이하를 사용할 경우 jdk 1.6부터 추가된 "javax.xml.stream.*"관련 소스를 참조하기때문에 에러가 발생한다...
쫄지말자.. 까짓거 jdk1.6이상 소스에서 아래와 같은 파일만 추가하면된다...(물론 JDK1.6이상일 경우는 문제없다..)
이제 마지막으로 도움이 되셨길바라면서.. 뿅!
반응형
Comments