1+ package com .baeldung .poi .benchmark ;
2+
3+ import java .io .IOException ;
4+ import java .util .concurrent .TimeUnit ;
5+
6+ import org .apache .poi .hssf .usermodel .HSSFWorkbook ;
7+ import org .apache .poi .ss .usermodel .Cell ;
8+ import org .apache .poi .ss .usermodel .Row ;
9+ import org .apache .poi .ss .usermodel .Sheet ;
10+ import org .apache .poi .ss .usermodel .Workbook ;
11+ import org .apache .poi .xssf .streaming .SXSSFWorkbook ;
12+ import org .apache .poi .xssf .usermodel .XSSFWorkbook ;
13+ import org .openjdk .jmh .annotations .*;
14+ import org .openjdk .jmh .infra .Blackhole ;
15+ import org .openjdk .jmh .profile .MemPoolProfiler ;
16+ import org .openjdk .jmh .runner .Runner ;
17+ import org .openjdk .jmh .runner .options .Options ;
18+ import org .openjdk .jmh .runner .options .OptionsBuilder ;
19+
20+ @ State (Scope .Benchmark )
21+ @ BenchmarkMode (Mode .AverageTime )
22+ @ Warmup (iterations = 1 , time = 2 )
23+ @ Measurement (iterations = 3 , time = 1 )
24+ @ OutputTimeUnit (TimeUnit .MILLISECONDS )
25+ @ Fork (value = 1 )
26+ public class WorkbookBenchmark
27+ {
28+
29+ @ Benchmark
30+ public static void write2500RowsToHSSFWorkbook (Blackhole blackhole ) throws IOException {
31+ writeRowsToWorkbook (new HSSFWorkbook (), 2500 , blackhole );
32+ }
33+
34+ @ Benchmark
35+ public static void write5000RowsToHSSFWorkbook (Blackhole blackhole ) throws IOException {
36+ writeRowsToWorkbook (new HSSFWorkbook (), 5000 , blackhole );
37+ }
38+
39+ @ Benchmark
40+ public static void write10000RowsToHSSFWorkbook (Blackhole blackhole ) throws IOException {
41+ writeRowsToWorkbook (new HSSFWorkbook (), 10000 , blackhole );
42+ }
43+
44+ @ Benchmark
45+ public static void write20000RowsToHSSFWorkbook (Blackhole blackhole ) throws IOException {
46+ writeRowsToWorkbook (new HSSFWorkbook (), 20000 , blackhole );
47+ }
48+
49+ @ Benchmark
50+ public static void write40000RowsToHSSFWorkbook (Blackhole blackhole ) throws IOException {
51+ writeRowsToWorkbook (new HSSFWorkbook (), 40000 , blackhole );
52+ }
53+
54+ @ Benchmark
55+ public static void write2500RowsToXSSFWorkbook (Blackhole blackhole ) throws IOException {
56+ writeRowsToWorkbook (new XSSFWorkbook (), 2500 , blackhole );
57+ }
58+
59+ @ Benchmark
60+ public static void write5000RowsToXSSFWorkbook (Blackhole blackhole ) throws IOException {
61+ writeRowsToWorkbook (new XSSFWorkbook (), 5000 , blackhole );
62+ }
63+
64+ @ Benchmark
65+ public static void write10000RowsToXSSFWorkbook (Blackhole blackhole ) throws IOException {
66+ writeRowsToWorkbook (new XSSFWorkbook (), 10000 , blackhole );
67+ }
68+
69+ @ Benchmark
70+ public static void write20000RowsToXSSFWorkbook (Blackhole blackhole ) throws IOException {
71+ writeRowsToWorkbook (new XSSFWorkbook (), 20000 , blackhole );
72+ }
73+
74+ @ Benchmark
75+ public static void write40000RowsToXSSFWorkbook (Blackhole blackhole ) throws IOException {
76+ writeRowsToWorkbook (new XSSFWorkbook (), 40000 , blackhole );
77+ }
78+
79+ @ Benchmark
80+ public static void write2500RowsToSXSSFWorkbook (Blackhole blackhole ) throws IOException {
81+ writeRowsToWorkbook (new SXSSFWorkbook (), 2500 , blackhole );
82+ }
83+
84+ @ Benchmark
85+ public static void write5000RowsToSXSSFWorkbook (Blackhole blackhole ) throws IOException {
86+ writeRowsToWorkbook (new SXSSFWorkbook (), 5000 , blackhole );
87+ }
88+
89+ @ Benchmark
90+ public static void write10000RowsToSXSSFWorkbook (Blackhole blackhole ) throws IOException {
91+ writeRowsToWorkbook (getSXSSFWorkbook (), 10000 , blackhole );
92+ }
93+
94+ @ Benchmark
95+ public static void write20000RowsToSXSSFWorkbook (Blackhole blackhole ) throws IOException {
96+ writeRowsToWorkbook (getSXSSFWorkbook (), 20000 , blackhole );
97+ }
98+
99+ @ Benchmark
100+ public static void write40000RowsToSXSSFWorkbook (Blackhole blackhole ) throws IOException {
101+ writeRowsToWorkbook (getSXSSFWorkbook (), 40000 , blackhole );
102+ }
103+
104+ private static SXSSFWorkbook getSXSSFWorkbook () {
105+ SXSSFWorkbook workbook = new SXSSFWorkbook ();
106+ workbook .setCompressTempFiles (true );
107+ return workbook ;
108+ }
109+
110+ public static void writeRowsToWorkbook (Workbook workbook , int iterations , Blackhole blackhole ) throws IOException {
111+ Sheet sheet = workbook .createSheet ();
112+ for (int n =0 ;n <iterations ;n ++) {
113+ Row row = sheet .createRow (sheet .getLastRowNum ()+1 );
114+ for (int c =0 ;c <256 ;c ++) {
115+ Cell cell = row .createCell (c );
116+ cell .setCellValue ("abcdefghijklmnopqrstuvwxyz" );
117+ }
118+ }
119+ workbook .close ();
120+ blackhole .consume (workbook );
121+ }
122+
123+ public static void main (String [] args ) throws Exception {
124+ Options options = new OptionsBuilder ()
125+ .include (WorkbookBenchmark .class .getSimpleName ()).threads (1 )
126+ .shouldFailOnError (true )
127+ .shouldDoGC (true )
128+ .addProfiler (MemPoolProfiler .class )
129+ .jvmArgs ("-server" ).build ();
130+ new Runner (options ).run ();
131+ }
132+
133+ }
0 commit comments