Хранилище BLOB-объектов Azure медленно с использованием FileStreamResult Controller.File

У меня есть веб-сайт ASP.NET, работающий в учетной записи веб-приложений Azure. У меня также есть учетная запись хранения, использующая режим блочных двоичных объектов.

Я загружаю видео файл размером всего около 9 мб. Загрузка занимает около 10 секунд.

Затем я показываю пользователю список файлов со ссылкой для скачивания. Когда вы нажимаете ссылку для скачивания и "сохраняете как" файл, он загружается. Для загрузки этого же файла требуется> 30 секунд.

Это очень медленно. Это всего 9 мб, и у меня супер быстрый интернет. Я могу загружать большинство файлов с обычных сайтов со скоростью> 3 МБ (мегабайт) в секунду, поэтому я ожидаю, что файл размером 9 МБ займет около 3 секунд.

Вот код, который я использую для возврата потока через мой контроллер:

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

person user856232    schedule 02.06.2016    source источник
comment
Вы можете поделиться кодом для GetBlob метода? Я также даю ответ, который, возможно, поможет вам определить проблему медлительности.   -  person Gaurav Mantri    schedule 02.06.2016


Ответы (1)


Не совсем ответ на ваш вопрос, но кое-что, что вы можете сделать, чтобы определить, в чем проблема.

Насколько я понимаю, здесь задействованы две вещи: загрузка большого двоичного объекта из хранилища больших двоичных объектов на ваш веб-сервер и загрузка файла с вашего веб-сервера в ваш браузер. Я считаю, что сначала нам нужно определить, в чем проблема медлительности.

Чтобы узнать, есть ли проблема с загрузкой большого двоичного объекта из хранилища больших двоичных объектов на ваш веб-сервер, вы можете либо установить таймер в свой метод GetAttachmentStream, либо использовать _ 2_ в библиотеке хранилища Azure. В этом классе есть члены StartTime и EndTime, которые могут сказать вам, сколько времени заняло выполнение запроса.

Вы можете сделать то же самое с кодом, который отправляет контент на ваш веб-сервер. На фронте веб-сервера может быть много вещей, которые также могут повлиять на скорость загрузки blob.

person Gaurav Mantri    schedule 02.06.2016