我正在开发一个大型项目所需的类似压缩实用程序的东西。
实用程序所做的是接受用户的请求并开始复制要求制作 zip 文件的所有文件,最后提供该 zip 文件以下载回用户。
现在的问题是,当多个用户发送请求时,实用程序会启动一个单独的线程(最多可以是定义的线程数的最大限制)。实用程序开始并行复制并且变得非常慢,甚至无法使用。
我需要一种方法来解决这个问题或任何任何方法,以便并行复制应该足够快。
我使用 Apache commons io 进行复制,使用 Zip4j 库进行压缩。
请建议。
我正在开发一个大型项目所需的类似压缩实用程序的东西。
实用程序所做的是接受用户的请求并开始复制要求制作 zip 文件的所有文件,最后提供该 zip 文件以下载回用户。
现在的问题是,当多个用户发送请求时,实用程序会启动一个单独的线程(最多可以是定义的线程数的最大限制)。实用程序开始并行复制并且变得非常慢,甚至无法使用。
我需要一种方法来解决这个问题或任何任何方法,以便并行复制应该足够快。
我使用 Apache commons io 进行复制,使用 Zip4j 库进行压缩。
请建议。
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 方法copyDirectoryToDirectory
和copyFileToDirectory
.
当只有 1 或 2 个请求时这工作正常,但当多个请求排队时它会变慢。
这是意料之中的,但是否可以提高性能。(我的意思是它只是可以容忍的。)