我正在开发一个类似于压缩实用程序的东西,这是在一个主要项目中所需的。
实用程序所做的就是接受用户的请求,并开始复制所需的所有文件以生成一个zip文件,最后将该zip文件提供给用户下载。
现在的问题是,当多个用户发送请求时,实用程序会启动一个单独的线程(最多可以是定义的线程数的最大限制)。实用工具开始并行复制,并且变得非常慢,就像不可用一样。
我需要一种方法来解决这个或任何方法,以便并行复制应该足够快。
我使用Apache commons io进行复制,使用Zip4j库进行压缩。
请提个建议。
发布于 2013-03-18 17:02:45
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。
当只有一个或两个请求时,这很好用,但当多个请求排成一行时,它会变得很慢。
这是意料之中的,但是否有任何性能提升可以做到。(我的意思是它只是可以容忍的。)
https://stackoverflow.com/questions/15470815
复制相似问题