У нас есть приложение, которое импортирует большое количество файлов, разбивая данные и сортируя их.При запуске тестового примера JUnit весь процесс занимает около 16 минут .
Тот же тест, выполненный с mvn clean test -Dtest=MyTest
, выполняется в 34 минут .
Мы звоним на /bin/sort
, чтобы отсортировать файлы.Вид, кажется, занимает больше времени.Я не понимаю, в чем дело.
Глядя на IntelliJ, он работает с
/Library/Java/JavaVirtualMachines/1.6.0_26-b03-383.jdk/Contents/Home/bin/java -Didea.launcher.port=7532 -Didea.launcher.bin.path=/Applications/IntelliJ IDEA 10.app/bin -Dfile.encoding=UTF-8 -classpath %classhpath% com.intellij.rt.execution.application.AppMain com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 xxx.IntTestImportProcess,testImportProcess
Я на OS X. Все классы вводятся с помощью Spring.Каковы некоторые возможные предположения о том, что стоит за этим увеличением производительности в IntelliJ?Тесты идентичны.Я не могу поделиться всем кодом, потому что есть так много.Но я могу добавить любую деталь, если потребуется.
Вот мой основной класс и как я выполняю оба.
public static void main(String... args) throws IOException {
if(args.length != 2) {
System.out.println("Usage: \n java -jar client.jar spring.xml data_file");
System.exit(1);
}
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(args[0]);
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendMinutes()
.appendSuffix("minute", "minutes")
.appendSeparator(" and ")
.appendSeconds()
.appendSuffix("second", "seconds")
.toFormatter();
URI output = (URI) applicationContext.getBean("workingDirectory");
File dir = new File(output);
if(dir.exists()) {
Files.deleteDirectoryContents(dir.getCanonicalFile());
}
else {
dir.mkdirs();
}
ImportProcess importProcess = applicationContext.getBean(ImportProcess.class);
long start = System.currentTimeMillis();
File file = new File(args[1]);
importProcess.beginImport(file);
Period period = new Period(System.currentTimeMillis() - start); // in milliseconds
System.out.println(formatter.print(period.toPeriod()));
}
Я решил удалить JUnit и просто использовать метод main ().Результат точно такой же.IntelliJ снова.Вот сумасшедший журнал.
С IntelliJ
DEBUG [ main] 2011-08-18 13:05:16,259 [er.DelimitedTextUnixDataSorter] Sorting file [/Users/amirraminfar/Desktop/import-process/usage]
DEBUG [ main] 2011-08-18 13:06:09,546 [er.DelimitedTextUnixDataSorter] Sorting file [/Users/amirraminfar/Desktop/import-process/customer]
С java -jar
DEBUG [ main] 2011-08-18 12:10:16,726 [er.DelimitedTextUnixDataSorter] Sorting file [/Users/amirraminfar/Desktop/import-process/usage]
DEBUG [ main] 2011-08-18 12:15:55,893 [er.DelimitedTextUnixDataSorter] Sorting file [/Users/amirraminfar/Desktop/import-process/customer]
Команда сортировки
sort -t' ' -f -k32,32f -k18,18f -k1,1n
Как вы можете видеть выше, сортировкав Intellij требуется 1 минута , но в java -jar требуется 5 минут !
Обновление
Я запустил все, используя /Library/Java/JavaVirtualMachines/1.6.0_26-b03-383.jdk/Contents/Home/bin/java
и сортировка все еще занимает более 5 минут.