4

Azure Files を介してフォルダー内のファイルを一覧表示するアプリがあります。C# メソッドを使用する場合:

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

2000 個のファイルがある場合、約 1 分かかります。

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 秒かかります。なぜこれほどまでに性能に差があるのでしょうか。

4

1 に答える 1

3

Directory.GetFiles (システム ファイル API) を使用すると、実際には SMB プロトコル経由で Azure File Storage と通信します (v2.1 または v3.0 はクライアント OS のバージョンによって異なります)。ただし、CloudStorageAccount に切り替えると、REST を介して File Storage と通信します。Wireshark を使用すると、SMB プロトコルでは、プロトコルの性質上、クライアントとサーバーの間で複数の要求がやり取りされることがわかります。Azure File Storage が SMB と REST アクセスの両方をサポートする理由は、(ファイル サーバーによってホストされているファイル共有にアクセスするために使用されていた) レガシ コード/アプリケーションが、コードを変更せずにクラウド内のファイル共有と通信できるようにするためです。

そのため、パフォーマンスを向上させるために、REST 呼び出しを使用して Azure File Storage にアクセスすることをお勧めします。

于 2016-06-28T01:22:03.583 に答える