[英]How to list all the Directories or Files, from a root Directory, in Azure File Storage -and- using the .NET Storage SDK?
[英]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.