Google Drive API C#文件下载速度异常缓慢,疑因强制病毒扫描
Google Drive API C#下载速度异常缓慢问题排查与求助
我正面临一个棘手问题:使用Google Drive API C#下载文件时速度异常缓慢,原因不明。
下载的文件均正常,无损坏或重复。测试用例为共享团队驱动器中的15个文件,大小在1MB-3MB之间,总大小28MB。我家带宽为3MB/s,使用Google Drive客户端下载仅需9-10秒,但通过API下载却耗时117秒。
我使用的是Google.Apis.Drive.v3包(版本信息如图所示)。
为排查问题,我将代码简化至最简形式:
Stopwatch sw = Stopwatch.StartNew(); foreach (GD.File file in files) await service.Files.Get(file.Id).DownloadAsync(new MemoryStream()); sw.Stop();
注:
files包含上述15个测试文件,仅做简单遍历并调用DownloadAsync方法,未对数据流做任何操作,仅用于测试。尝试了同步、异步两种方式,结果一致。
其他测试情况:
- 在100MB/s的高速网络环境下测试,耗时仍达114秒。
- 尝试直接使用
MediaDownloader类,但未能成功(下载的文件为空)。
编辑1:单文件下载进度追踪
测试单个63MB的文件,记录下载字节数与时间点的JSON数据:
Stopwatch sw = Stopwatch.StartNew(); JsonArray eventsJSON = new(); JsonObject fileJSON = new() { { "id", fileId }, { "events", eventsJSON } }; FilesResource.GetRequest getRequest = service.Files.Get(fileId); getRequest.MediaDownloader.ChunkSize = 262144; getRequest.MediaDownloader.ProgressChanged += progress => { JsonObject eventJSON = new() { { "time", sw.ElapsedMilliseconds / 1000.0 }, { "bytes", progress.BytesDownloaded }, { "finished", progress.Status == DownloadStatus.Completed } }; eventsJSON.Add(eventJSON); }; await getRequest.DownloadAsync(new MemoryStream()); sw.Stop(); fileJSON.Add(new KeyValuePair<string, JsonNode?>("finalTime", sw.ElapsedMilliseconds / 1000.0)); await hRes.WriteAsJsonAsync(fileJSON);
结果:调用下载函数后,30秒才开始接收字节,最终于57秒完成。实际下载时长27秒(符合文件大小的正常速度),但启动下载耗时30秒。
编辑2:网络抓包验证
使用Wireshark检查Google Drive API与程序之间的通信,结果一致:请求下载后有30秒无任何数据传输(时间值如图所示)。
编辑3:非C#客户端测试
- 直接通过Postman发送请求,遇到完全相同的问题。
- 使用Google开发者内置UI发送请求,耗时38秒(比之前快约20秒),但仍远慢于预期(最多应耗时25秒)。
- 补充:仅获取文件内容的操作缓慢,其他操作如列出文件夹中的文件则几乎瞬间完成。
编辑4:找到问题根源
Google Drive API会对所有文件进行病毒扫描,包括压缩包内的文件。而我的用户仅上传Excel和PowerPoint文件(这类文件本质是压缩包)。
存在的差异:
- 普通Google Drive客户端下载压缩包类文件时似乎会跳过病毒扫描,下载很快启动。
- Google Drive API则会强制进行病毒扫描。
现在确定问题出在Google Drive API,请问是否有可行的解决办法?
内容的提问来源于stack exchange,提问作者Sébastien B.
相关产品推荐
相关产品推荐

