0

リムーバブルデバイスで実行するように設計されたJavaアプリケーションがあります。その特徴の1つは、ドライブ上のすべてのフォルダーを一覧表示するように設計されていることですが、ファイルとフォルダーが多いほど、(コンピューターの性能に関係なく)時間がかかり、削除デバイスが大きくなり、最近はもっと大きくなっているので、このプロセスでできるだけスピードを上げることが重要だと思います。

(コーディングではなく、リストの観点から)最良/最速の方法はインデックスファイルを作成することであることを私は知っていますが、それは私のアプリケーションが何であるかという点を見逃していると思います。ですから、理論的には2つでもリストの速度が2倍になるので、スレッドが役立つかもしれないと思いましたが、これが可能かどうかはわかりません。

任意の回答をいただければ幸いです。これが私が現在持っている再帰的な方法です:

private static void recursiveNodeCreation(DefaultMutableTreeNode node, String root){
        if(root==null) root = RUNNING_DRIVE = ".";

        try{
        // Get a list of files/folders in the root directory
        File rootDir = new File(root);

        File[] files = rootDir.listFiles();
        // Loop through the files/folders
        for(File current : files){
            if(Files.isReadable(current.toPath()) && !current.isHidden() && current.isDirectory()){
                DefaultMutableTreeNode folder = new DefaultMutableTreeNode(new FolderOnDrive(current.getName(), current.getPath()));
                recursiveNodeCreation(folder, current.getPath());
                node.add(folder);
            }
        }
        }catch(Exception e){e.printStackTrace();}
}

RUNNING_DRIVEアプリケーションが実行されているドライブのドライブ文字を保持し= "."ます。テスト中の速度を上げるために追加しました。ご想像のとおり、JTree内のすべてのフォルダーを一覧表示しています。)

4

2 に答える 2

2

複数の操作を並行して実行できる場合、アプリケーションをスレッド化すると、アプリケーションの速度が向上します。たとえば、単一のネットワーク接続から読み取りと書き込みを行う場合は、他の接続を同時に処理できるようにスレッドをフォークするのが理にかなっています。

ただし、あなたの場合、IO要求を処理するリムーバブルデバイスの機能によって制限されていると思われます。すべてのデバイス(メモリを含む)には、スレッドの数に関係なく、ある期間に処理できる最大数の要求と最大量のデータがあります。メモリースティックなどは遅いことで有名です。そのため、多くのカメラにはメモリが内蔵されており、SDカードに書き込みながらすばやく何枚もの写真を撮ることができます。スレッドを追加しても、アプリケーション全体のパフォーマンスは向上しない可能性が高く、IO要求がストレージドライブのさまざまな部分で機能し、互いに競合するため、実際にはパフォーマンスが低下する可能性があります。

アプリケーションのパフォーマンスを向上させる1つの方法は、1つのスレッドにバックグラウンドでデバイスの実際の読み取りを実行させることです。次に、UIは初期結果(トップディレクトリなど)をユーザーに表示し、バックグラウンドスレッドがデバイスから読み込むときに詳細情報を入力できます。

IOバウンドであるかどうかをテストするには、より高速なハードドライブでコードを実行して、ディレクトリの再帰速度をリムーバブルデバイスと比較する必要があります。

于 2012-07-24T17:16:43.883 に答える
1

IOは本当に遅いです。この記事では、パフォーマンスのためにファイルIOを調整する方法について説明しますが、プログラムはファイルの内容を読み取っていないため、速度を上げることができるとは思えません。プログラムのボトルネックは、ファイルを一覧表示できる速度ではなく、デバイスからファイルの一覧を取得できる速度です。

必要な数のスレッドを追加できますが、ボトルネックは引き続きIOです。

于 2012-07-24T17:13:54.967 に答える