2016-06-02 29 views
2

Wir haben eine App, die Dateien in einem Ordner über Azure-Dateien auflistet. Wenn wir die C# -Methode verwenden:Azure-Datei Speicher SMB langsam zum Auflisten von Dateien im Verzeichnis

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

Es dauert etwa eine Minute, wenn 2000 Dateien vorhanden sind.

Wenn wir CloudStorageAccount verwenden das gleiche zu tun:

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; 
    } 

Es gibt alle Dateien, aber dauert etwa 10 Sekunden. Warum gibt es einen so großen Leistungsunterschied?

Antwort

2

Bei Verwendung von Directory.GetFiles (Systemdatei-API) kommuniziert es tatsächlich mit Azure File Storage über das SMB-Protokoll (v2.1 oder v3.0 hängt von der Client-Betriebssystemversion ab). Wenn Sie jedoch zu CloudStorageAccount wechseln, wird über REST mit dem Dateispeicher kommuniziert. Wenn Sie Wireshark verwenden, werden Sie feststellen, dass das SMB-Protokoll aufgrund der Art des Protokolls mehrere Anforderungen zwischen Client und Server hat. Der Grund für Azure File Storage unterstützt sowohl SMB- als auch REST-Zugriff ist, dass Ihr Legacy-Code/Ihre Anwendung (die auf von Dateiservern gehostete Dateifreigaben zugreift) jetzt mit einer Dateifreigabe in Cloud ohne Codeänderung kommunizieren kann.

Die Empfehlung in Ihrem Fall besteht darin, mit REST-Aufruf auf Azure File Storage zuzugreifen, um eine bessere Leistung zu erzielen.