2

私は主要なプロジェクトで必要とされる圧縮ユーティリティのようなものを開発しています。

ユーティリティが行うことは、ユーザーからの要求を受け取り、要求されたすべてのファイルのコピーを開始して zip ファイルを作成し、最後にその zip ファイルをユーザーにダウンロードして戻すことです。

ここでの問題は、複数のユーザーがリクエストを送信し、ユーティリティが別のスレッドを開始する場合です (定義されたスレッドの最大数に制限される可能性があります)。ユーティリティは並行してコピーを開始し、非常に遅くなり、使用できなくなります。

並列コピーが十分に高速になるように、これまたは任意の方法を解決する方法が必要です。

コピーにはApache commons ioを使用し、圧縮にはZip4jライブラリを使用しています。

提案してください。

4

1 に答える 1

0
if (!isFresh) {
    ArrayList<String> foldersNamesToBeZipped =
            GeneralInfoDownload.getFilesToDownloadForWorkstep(this.map.get("DEPARTMENT"));
    ArrayList<File> folderFilesToBeZipped = new ArrayList<File>();

    for (String name : foldersNamesToBeZipped) {
        folderFilesToBeZipped.add(new File(MasterPath + System.getProperty("file.separator") + name));
    }

    log.info("****************Copying start TimeStamp***************" + this.map.get("JID"));
    TDFileUtil.copyFilesToDirectory(folderFilesToBeZipped,
           new File(toPcFolder.getAbsolutePath() + File.separator
           + "NEW_ORIGNALS"));
    }
}

GeneralInfoDownload.getFilesToDownloadForWorkstep関数は、圧縮してダウンロードするすべてのファイルを取得します。

TDFileUtil.copyFilesToDirectory内部の関数は、Apache commons メソッドcopyDirectoryToDirectorycopyFileToDirectory.

これは、リクエストが 1 つまたは 2 つしかない場合は問題なく動作しますが、複数のリクエストが並んでいると遅くなります。

これは予想されることですが、実行できるパフォーマンスの向上はありますか。(あくまで許容範囲という意味です。)

于 2013-03-18T09:02:44.957 に答える