首页 > 解决方案 > 在 Eclipse 中使用 Package 选项导出 Runnable Jar 时,Apache POI 非常慢

问题描述

当我使用 Eclipse 中的 Package 选项导出可运行 jar 时读取 excel 文件时,Apache POI 出现性能问题,而不是使用将所需库提取到生成的 JAR 选项。

为了向您展示问题,我创建了一个最小程序。build.gradle 文件是:

plugins {
    id 'java'
}

sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
     compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.2'
}

和 App.java 文件:

import java.io.File;
import java.io.FileInputStream;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class App {

     public static void main(final String[] args) {
        final String excelPath = System.getProperty("user.dir") + "/libro.xlsx"  ;
        try {
            final FileInputStream fis = new FileInputStream(new File(excelPath));
            
            
            final long TIMER = System.currentTimeMillis();
            System.out.println(  "start") ;
            XSSFWorkbook wb = new XSSFWorkbook( fis );
            wb.close();
            System.out.println( "end : " + ( System.currentTimeMillis() - TIMER) + " msec" ) ;
            
            
        } catch (final Exception e) {
            System.out.println("error " + e.getMessage()) ; 
        }
    }
}

当我使用空的 excel 文件运行程序时,我在同一台机器上使用相同的文件得到以下结果:

大约10倍以上。

这可能是什么问题,我该如何解决它以使执行时间相似?

谁能帮我找到问题并解决它?

先感谢您。

标签: javaeclipseapache-poi

解决方案


jar tf您可以使用后跟存档查看两个文件之间的差异。可能其中一个档案包含签名的内容,这意味着在加载时,JVM 将验证内容是否相同。您可能会看到使用 运行时是否有类似的执行时间-Xverify:none,尽管我建议不要在生产系统中这样做。


推荐阅读