我有没有办法优化这个java代码?
此代码应在文件夹中查找图像,并将这些图像合并到一个6000x6000图像中。它正在工作,但是它真的很慢。我可以实现的任何优化我有没有办法优化这个java代码?,java,optimization,image-processing,Java,Optimization,Image Processing,此代码应在文件夹中查找图像,并将这些图像合并到一个6000x6000图像中。它正在工作,但是它真的很慢。我可以实现的任何优化 File in = new File(args[1]); File out = new File(args[2]); in.mkdirs(); out.mkdirs(); if(out.exists()) { out.delete(); } if(!in.isDirectory())
File in = new File(args[1]);
File out = new File(args[2]);
in.mkdirs();
out.mkdirs();
if(out.exists())
{
out.delete();
}
if(!in.isDirectory())
{
Main.printUsage();
}
BufferedImage bout = new BufferedImage(6032, 6032, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bout.createGraphics();
int count = 0;
long starttime = System.currentTimeMillis();
for(int i=0; i<=376; i++)
{
for(int k=0; k<=376; k++)
{
File cu = new File(in, (i-188)+"-"+(k-188)+".png");
if(cu.exists())
{
count++;
try {
g.drawImage(ImageIO.read(cu), 16*i, 16*k, null);
} catch (IOException e) {
e.printStackTrace();
}
Runtime.getRuntime().;
}
}
}
System.out.println("Processed "+count+" chunks in "+((System.currentTimeMillis()-starttime)/1000F)+" seconds");
g.dispose();
try {
ImageIO.write(bout, "png", out);
} catch (IOException e) {
e.printStackTrace();
}
File in=新文件(args[1]);
文件输出=新文件(args[2]);
in.mkdirs();
out.mkdirs();
if(out.exists())
{
out.delete();
}
如果(!in.isDirectory())
{
Main.printUsage();
}
BuffereImage bout=新的BuffereImage(6032,6032,BuffereImage.TYPE_INT_ARGB);
Graphics2D g=bout.createGraphics();
整数计数=0;
long starttime=System.currentTimeMillis();
对于(int i=0;i文件系统,打开所有这些文件时可能会出现延迟。对于单个目录中的这么多文件,即使只是在目录中查找时间也是非常重要的
如果是这种情况,就不会有软件解决方案。尝试将文件放在闪存驱动器上,看看是否有帮助,即使只是作为测试。打开所有这些文件可能会在文件系统中出现延迟。由于一个目录中有这么多文件,即使只是在目录中查找时间也不算少
如果是这样的话,就不会有软件解决方案了。试着把文件放在一个闪存驱动器上,看看它是否有帮助,即使只是作为一个测试。
< P>我不知道你的应用程序,但是你可以保存你新创建的图像,并在生成新的图像之前检查它是否是最新的。或者,保存更多的信息,只更新改变的PAR。ts
但是,如果每次加载程序时都会发生变化,那么瓶颈显然是I/O延迟。如果没有钱购买SSD或RAID系统,您将无法通过它;)我不知道您的应用程序,但您可以保存新创建的映像,并在生成新映像之前检查它是否最新。或者,保存更多信息并仅更新更改的零件
但是,如果每次加载程序时都会发生变化,那么瓶颈显然是I/O延迟。如果没有钱购买SSD或RAID系统,您将无法通过它;) 大小为6032*6032的图像和两个嵌套循环,每个循环大小为376
至少2次绘制近3600万个像素
循环14.1万次
别忘了读文件
我建议您尝试使用两个线程组合成对的图像,一个大小为6032*6032的图像和两个嵌套循环,每个大小为376
至少2次绘制近3600万个像素
循环14.1万次
别忘了读文件
我建议你尝试使用2个线程
对图像进行组合,以优化已经工作的代码,你应该考虑“没有太大的应该改变”,除非所显示的代码是完全不变的,这完全是毫无意义的——噪音。我已经消除了这个问题的噪音。请用..实际代码或我第一次建议的SSCCE替换它。@Andrew,我不明白你为什么认为删除代码有帮助。这比你留下的问题要好得多。@AndrewThompson-你能把它降低一点吗。是的,代码可能无法编译,但你咄咄逼人的语气(大喊“噪音”)也帮不了什么忙。完全删除代码会降低问题的价值,它可能不会编译,但至少从发布的内容可以推断出它在做什么。对于OP:我建议发布一个可编译/可运行的代码示例,该示例已分析,以找出瓶颈所在。如果你这样做,那么标志,这样我就可以迁移到我们的代码审查网站。为了优化已经工作的代码,你应该考虑“没有太大的应该改变”,除非所显示的代码是完全不变的,这是完全没有意义的-噪音。我已经消除了这个问题的噪音。请用..实际代码或我第一次建议的SSCCE替换它。@Andrew,我不明白你为什么认为删除代码有帮助。这比你留下的问题要好得多。@AndrewThompson-你能把它降低一点吗。是的,代码可能无法编译,但你咄咄逼人的语气(大喊“噪音”)也帮不了什么忙。完全删除代码会降低问题的价值,它可能不会编译,但至少从发布的内容可以推断出它在做什么。对于OP:我建议发布一个可编译/可运行的代码示例,该示例已分析,以找出瓶颈所在。如果你这样做了,那么我就可以把它迁移到我们的代码审查网站上。一个闪存驱动器?例如,拇指驱动器或SSD?如果是前者(特别是USB 2.0的速度),那可能不会有什么帮助…@minitech,我写它的时候正在考虑SSD。拇指驱动器可能更容易获得,如果它能工作,你就知道答案了。如果它不起作用,你的情况也不会更糟。闪存驱动器?例如,拇指驱动器或SSD?如果是前者(特别是USB 2.0的速度),那可能不会有什么帮助…@minitech,我写它的时候正在考虑SSD。拇指驱动器可能更容易获得,如果它能工作,你就知道答案了。如果它不起作用,那么你的境况也不会更糟。