1

クラスTileの何千ものインスタンスを作成しようとしています。

int length=64;
Tile tiles[][]=new Tile[length][length]
for(int y=0;y<length;y++)for(int x=0;x<length;x++)
    try{tiles[x][y]=new Tile(x,y);}catch(FileNotFoundException e) {e.printStackTrace();}

新しいタイルを作成するには、0.01 ~ 0.1 秒かかります。

これへのスレッドを作成して実験しましたが、遅くなりました。

tiles=new Tile[length][length];
private static int y,x;
final CountDownLatch end=new CountDownLatch(length*length);
for( y=0;y<tiles.length;y++)for(x=0;x<tiles.length;x++)
    new Thread()
    {
        public void run()
        {
                int y=new Integer(OutterClass.y),x=new Integer(OutterClass.x);      
            try {
                tiles[x][y]=new Tile(x,y);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
                end.countDown();
        }
    }.start();
end.await();

これをスピードアップすることはありますか?

4

3 に答える 3

0

多くの調査の後、誰かがファイルをプリロードすることを提案しました。私はそれを試してみましたが、かなり高速に実行されます。だからここに私がしたことがあります

  1. まず、プログラムを実行するときに、使用するすべてのファイルをハッシュマップにロードしました。これにより読み込み速度が遅くなりましたが、以前よりは改善されました。必要なときに各ファイルを読み込むため、同じファイルを何千回も読み取る必要がありました。

  2. 次に、各タイルは必要な情報をハッシュマップから取得します。

また、個別のスレッドを使用することは非常に非効率的であることに同意します。

于 2013-11-02T21:02:55.097 に答える