我有没有办法优化这个java代码?

我有没有办法优化这个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())

此代码应在文件夹中查找图像,并将这些图像合并到一个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())
    {
        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。拇指驱动器可能更容易获得,如果它能工作,你就知道答案了。如果它不起作用,那么你的境况也不会更糟。