我的应用程序需要从 GCS 存储桶下载文件。我可以使用 StorageClient DownloadObjects 方法从 GCS 下载文件。但性能真的很慢。对于 50MB 的文件大小,需要 3-4 分钟,并且这个时间会因时间差异而有很大差异。请查找示例代码并告诉我如何提高下载性能?
类程序 { public static void Main(string[] args) {
GoogleCredentials gcpCreds = new GoogleCredentials()
{
private_key = "-----BEGIN PRIVATE KEY-----PrivateKey-----END PRIVATE KEY-----\n",
client_email = "client_email",
type = "service_account"
};
var credentials = GoogleCredential.FromJson(JsonConvert.SerializeObject(gcpCreds));
// var credentials= GoogleCredential.GetApplicationDefault();
var storage = StorageClient.CreateAsync(credentials).Result;
string localPath, directoryPath, localFileName, objectName, bucketName;
directoryPath = "localpathstring";
objectName = "SourceFileName";
localFileName = objectName;
localPath = directoryPath + "\\" + localFileName;
bucketName="bucketName";
FileStream fs = new FileStream(localPath, FileMode.OpenOrCreate);
//Code to download with progress bar
DownloadObjectOptions option = new DownloadObjectOptions();
using (fs)
{
var progress = new Progress<IDownloadProgress>(
p => Console.WriteLine($"bytes: {p.BytesDownloaded}, status: {p.Status},"));
storage.DownloadObject(bucketName, objectName, fs, option, progress);
}
}
答案1
您遇到的延迟问题可能来自应用程序、网络(您自己的或 Google 的)或云存储服务。要确定根本原因,请遵循以下步骤:
- 跑步地铁发送 2 次到 Cloud Storage 端点,以确定网络上是否/在哪里观察到延迟。命令示例:
mtr -4 -n -r -c 10 www.googleapis.com
- 直接使用 gsutil 下载文件确定问题是否出在应用程序端。
- 使用以下方式运行性能诊断“perfdiag” gsutil 命令确定 Cloud Storage 方面是否存在任何问题。命令示例:
gsutil perfdiag -o output.json gs://your-bucket
如果结果显示指标健康,那么值得尝试异步下载文件. 最后,这里有一些优化云存储性能的技巧。