簡體   English   中英

Azure文件存儲SMB很慢,無法列出目錄中的文件

[英]Azure file Storage SMB slow to list files in directory

我們有一個應用程序,通過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秒。 為什么性能會有這么大的差異?

使用Directory.GetFiles(系統文件API)時,它實際上通過SMB協議與Azure文件存儲進行通信(v2.1或v3.0取決於客戶端操作系統版本)。 但是,當切換到CloudStorageAccount時,它會通過REST與文件存儲進行通信。 如果您使用Wireshark,您會發現由於協議的性質,SMB協議將在客戶端和服務器之間有幾個來回請求。 Azure文件存儲支持SMB和REST訪問的原因是允許您的舊代碼/應用程序(用於訪問由文件服務器托管的文件共享)現在可以與雲中的文件共享進行通信,而無需更改代碼。

因此,您的建議是使用REST調用來訪問Azure文件存儲以獲得更好的性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM