【发布时间】:2010-10-15 14:58:29
【问题描述】:
有没有办法在 java 中执行一个命令,而不会受到使用 ProcessBuilder 的启动开销(缓慢)的影响?
更多细节:我正在使用 im4java,这是一个内部使用 ProcessBuilder 执行 imagemagick 程序的 java 库。它很慢。我创建了一个小型单元测试,表明 ProcessBuilder(不是 im4java)是问题所在。缓慢是使用 ProcessBuilder 的启动开销。我发现互联网上的帖子说 processbuider 有开销,所以不仅仅是我说的。
List<String> commands = new ArrayList<String>();
commands.add("C:\\PROGRA~2\\ImageMagick-6.6.4-Q16\\convert.exe");
commands.add("dog.jpg");
commands.add("output.jpg");
ProcessBuilder processBuilder = new ProcessBuilder(commands);
Process start = processBuilder.start();
start.waitFor();
【问题讨论】:
-
性能真的是个问题,还是只是在测试过程中“烦人”?鼓励使用 ProcessBuilder 比使用 Runtime.exec() 有几个很好的理由 (javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html)。
-
是的,性能是个问题。虽然我错了 ProcessBuilder 降低性能的时间。它不会添加太多。似乎有几个地方速度变慢了,所以它正在加起来。
标签: java imagemagick