Java Google驱动器下载性能问题
我从Google Drive下载一些文件时遇到性能问题 以下代码在4个具有不同文件的并行线程中执行Java Google驱动器下载性能问题,java,multithreading,performance,google-drive-api,Java,Multithreading,Performance,Google Drive Api,我从Google Drive下载一些文件时遇到性能问题 以下代码在4个具有不同文件的并行线程中执行 serverfile = _drive.files().get(fileid).execute(); outstream = java.nio.file.Files.newOutputStream(tempPath.getPath()); Files.Get request = _drive.files().get(serverfile.getId()); request.executeMedi
serverfile = _drive.files().get(fileid).execute();
outstream = java.nio.file.Files.newOutputStream(tempPath.getPath());
Files.Get request = _drive.files().get(serverfile.getId());
request.executeMediaAndDownloadTo(outstream);
我还尝试了不同的实现
serverfile = _drive.files().get(fileid).execute();
outstream = java.nio.file.Files.newOutputStream(tempPath.getPath());
URL url = new URL(serverfile.getDownloadUrl());
HttpsURLConnection connection = (HttpsURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Bearer " + accesstoken);
IOUtils.copy(connection.getInputStream(), outstream);
connection.disconnect();
这段代码在我的四核Macbook Pro上导致了250%-300%的CPU负载。
如果我尝试使用dropbox api执行类似的任务,那么CPU负载就会低得多
有什么我可以优化,以大幅减少CPU负载
我发现一件事是它与下载速度相关。我有一个100Mbit/s的互联网连接,如果我将速度限制到2 MBit/s,CPU使用率将低于10%。您可以尝试使用普通的旧Java下载媒体,从而绕过Google库。执行files.get以获取文件对象。然后使用它的downloadUrl属性通过一个简单的Java http请求获取媒体。我想我在第二个代码段中完成了这一点。或者你的意思不同?我的错,我没有读第二段。版本2是纯Java获取https,因此无法进一步优化。您能否澄清两个代码示例中的哪一个使用了250%-300%的CPU负载?两者消耗的量相同。您下载的文件有多大?是很多小文件还是几个大文件?我使用了一个混合文件集,所以文件大小在几kB到200MB之间。如果我只使用大的还是小的,这没有什么区别。