【问题标题】:Azure file Storage SMB slow to list files in directoryAzure 文件存储 SMB 列出目录中的文件很慢
【发布时间】:2016-06-02 03:08:09
【问题描述】:

我们有一个应用程序通过 Azure 文件列出文件夹中的文件。当我们使用C#方法时:

Directory.GetFiles(@"\\account.file.core.windows.net\xyz")

当有 2000 个文件时,大约需要一分钟。

如果我们使用 CloudStorageAccount 来做同样的事情:

  CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
  CloudFileDirectory directory = fileClient.GetShareReference("account").GetRootDirectoryReference().GetDirectoryReference("abc");
  Int64 totalLength = 0;
  foreach (IListFileItem fileAndDirectory in directory.ListFilesAndDirectories())
  {
    CloudFile file = (CloudFile)fileAndDirectory;
    if (file == null) //must be directory if null
      continue;

    totalLength += file.Properties.Length;
  }

它返回所有文件,但大约需要 10 秒。为什么会有这么大的性能差异?

【问题讨论】:

  • 嗨,我正在尝试使用第一种方法,即 system.io 命名空间并使用 Directory.GetFiles 或 Directory.CreateDirectory 但我在任何地方都找不到任何完整的示例/示例。在此之前我们必须做任何步骤吗?我们如何使用 Azure 存储进行身份验证?
  • @MilindThakkar,关于在 Azure 文件存储上管理对象,您可能会发现这篇文章很有用(“使用 .NET 开发 Azure 文件”)docs.microsoft.com/en-us/azure/storage/files/…

标签: c# azure azure-storage smb azure-files


【解决方案1】:

使用 Directory.GetFiles(系统文件 API)时,它实际上通过 SMB 协议(v2.1 或 v3.0 取决于客户端操作系统版本)与 Azure 文件存储通信。但是,当切换到 CloudStorageAccount 时,它会通过 REST 与文件存储通信。如果您使用 Wireshark,您会发现由于协议的性质,SMB 协议将在客户端和服务器之间有多个来回请求。 Azure 文件存储同时支持 SMB 和 REST 访问的原因是允许您的旧代码/应用程序(用于访问由文件服务器托管的文件共享)现在可以与云中的文件共享进行通信,而无需更改代码。

因此,您的建议是使用 REST 调用来访问 Azure 文件存储以获得更好的性能。

【讨论】:

  • Tang:嗨,我正在尝试使用第一种方法,即 system.io 命名空间并使用 Directory.GetFiles 或 Directory.CreateDirectory,但我在任何地方都找不到任何完整的示例/示例。在此之前我们必须做任何步骤吗?我们如何使用 Azure 存储进行身份验证?
猜你喜欢
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 2015-04-17
  • 2019-05-14
  • 1970-01-01
  • 2019-01-03
相关资源
最近更新 更多