2016-06-02 4 views
0

Ich habe eine ASP.NET-Website unter Azure Web Apps-Konto ausgeführt. Ich habe auch ein Speicherkonto, das den Block-Blob-Modus verwendet.Azure Blob Storage langsam Verwenden von FileStreamResult Controller.File

Ich lade eine Videodatei, die nur etwa 9 MB ist. Das Hochladen dauert etwa 10 Sekunden.

Ich zeige dann eine Liste von Dateien für den Benutzer mit einem Download-Link. Wenn Sie auf den Download-Link klicken und "Speichern unter" die heruntergeladene Datei. Es dauert> 30 Sekunden, um diese Datei herunterzuladen.

Dies ist extrem langsam. Es ist nur 9 MB und ich habe super schnelles Internet. Ich kann die meisten Dateien von normalen Seiten mit> 3 MB (Megabyte) pro Sekunde herunterladen, also würde ich erwarten, dass eine 9 MB-Datei ungefähr 3 Sekunden dauert. Hier

sind der Code, den ich den Strom über meinen Controller zurückzukehren bin mit:

public Stream GetAttachmentStream(string attachmentId) 
    { 
     MemoryStream stream = new MemoryStream(); 
     var storage = Storage.Instance("StorageConnectionStringLive"); 
     storage.GetBlob(attachmentId, stream); 

     stream.Seek(0, SeekOrigin.Begin); 

     return stream; 
    } 

    public ActionResult GetFile(string id, string fileName, string mimeType) 
    { 
     var fileStream = GetAttachmentStream(id); 

     Response.AppendHeader("Content-Disposition", "inline; filename=" + fileName); 
     return File(fileStream, mimeType); 
    } 
+0

Können Sie den Code für die GetBlob-Methode teilen? Ich gebe auch eine Antwort, die Ihnen möglicherweise helfen könnte, das Langsamkeitsproblem zu identifizieren. –

Antwort

0

nicht wirklich eine Antwort auf Ihre Frage, aber einige Dinge, die man tun könnte, um herauszufinden, wo das Problem ist.

Wie ich es verstehe, sind hier zwei Dinge beteiligt: ​​das Herunterladen von Blob aus dem Blobspeicher auf Ihren Webserver und das Herunterladen der Datei von Ihrem Webserver in Ihren Browser. Ich glaube, zuerst müssen wir isolieren, wo das Problem der Langsamkeit ist.

Um festzustellen, ob beim Laden von Blob aus dem BLOB-Speicher auf den Webserver ein Problem auftritt, können Sie entweder einen Timer in Ihre GetAttachmentStream-Methode einfügen oder die OperationContext-Klasse in der Azure-Speicherbibliothek verwenden. Diese Klasse hat StartTime und EndTime Mitglieder, die Ihnen sagen können, wie viel Zeit die Anfrage genommen hat.

Sie können das Gleiche für den Code tun, der den Inhalt an Ihren Webserver sendet. Auf der Webserver-Front könnte es viele Dinge geben, die sich auch auf die Download-Geschwindigkeit von Blob auswirken könnten.