C# Blob代码下载速度比MS Azure Storage Explorer慢得多

C# Blob代码下载速度比MS Azure Storage Explorer慢得多,c#,azure,azure-storage-blobs,azure-blob-storage,C#,Azure,Azure Storage Blobs,Azure Blob Storage,我正在从blob存储下载一个1GB大小的blob 如果我使用msazure存储资源管理器,它需要不到10分钟的时间(我有一个20兆的下线) 但是,当我使用代码时: await blobRef.DownloadToFileAsync("D:\\temp\\data.mdf", FileMode.Create); (我也尝试过使用内存流)下载250MB需要一个多小时(在这一点上我杀死了它)。我已经做过多次这个测试,而且一直都是这样 我还监控了网络流量 通过Storage Exlorer,向下的网

我正在从blob存储下载一个1GB大小的blob

如果我使用msazure存储资源管理器,它需要不到10分钟的时间(我有一个20兆的下线)

但是,当我使用代码时:

await blobRef.DownloadToFileAsync("D:\\temp\\data.mdf", FileMode.Create);
(我也尝试过使用内存流)下载250MB需要一个多小时(在这一点上我杀死了它)。我已经做过多次这个测试,而且一直都是这样

我还监控了网络流量

  • 通过Storage Exlorer,向下的网络流量约为20兆比特
  • 通过代码,向下的网络流量约为1Mgabit

编辑:我仍在使用旧版本的Azure Storage Explorer(1.4.1)。但是我可以确认新版本也会给出相同的结果。

您应该指定您使用的是哪个版本的MS Azure Storage explorer

如果您使用的是一些较新版本的1.9.0/1.8.1/1.8.0等(请在此查找更多详细信息),那么Azure Storage Explorer将与之集成,它将使用为获得最佳性能而设计的简单命令。因此,您可以在下载/上载等方面具有良好的性能


当使用代码下载/上传blob时,您可以使用此代码。此库基于为AzCopy提供动力的核心数据移动框架,AzCopy还为您提供高性能上传和下载。

我最终尝试了@Ivan和@mjwills提出的两种解决方案:

  • 结果是10分钟12秒
  • 结果是9分钟35秒
这两种解决方案都比最初下载的FileAsync快得多。DownloadToFileParallelAsync仅在库的更高版本中可用,因此在我安装的版本中不可用。

我建议使用

根据文件:

启动异步操作以下载blob的内容 通过发出并行请求来创建文件

以及:

应根据需要调整parallelIOCount和rangeSizeInBytes 在CPU、内存和带宽上

此API应仅用于更大的下载,因为HEAD请求是必需的 在下载数据之前进行

对于较小的blob,请使用DownloadToFileAsync()

为了获得最佳性能,建议尝试几个值, 并测量吞吐量

首先将parallelIOCount设置为数字 中央处理器

然后调整rangeSizeInBytes,使parallelIOCount时间 rangeSizeInBytes等于希望进程运行的内存量 消费


与DownloadToFileAsync相比,这种方法的好处是可以并行(同时)下载文件的多个“切片”。这对于通过快速internet连接的大型文件来说是有益的(在大多数情况下,我希望它会快4-8倍)。

如何“避免使用async void。返回类似public async TaskDownloadAsync(字符串路径,字符串[]名称)的任务,以便您可以等待该方法“我没有async void”。它是异步主目录中的异步方法。可能不同的加密或zip方法我可以确认此行为。通过MS Azure Storage explorer下载我的文件01:09.87,但通过DownloadToFileAsync方法,需要03:04:01。也许他们正在Azure Storage Explorer中将下载分块,然后进行并行下载?我仍在使用旧版本的Storage Explorer(1.4.1)。因此,不可能是azcopy起作用,但我会尝试一下您的建议。@Murdock,请在您的帖子中指定storage explorer的版本:)