我们有一个应用程序,可通过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协议(v2.1或v3.0取决于客户端操作系统版本)与Azure File Storage对话。但是,当切换到CloudStorageAccount时,它将通过REST与文件存储通信。如果使用Wireshark,您会发现由于协议的性质,SMB协议将在客户端和服务器之间有多个来回请求。Azure文件存储同时支持SMB和REST访问的原因是允许您的旧代码/应用程序(用于访问文件服务器托管的文件共享)现在可以与Cloud中的文件共享进行对话,而无需更改代码。
因此,根据您的情况,建议使用REST调用来访问Azure文件存储以提高性能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句