0

Мы храним наши файлы в Azure blob, мы предоставляем возможность нашему пользователю загружать несколько файлов в формате zip (может быть 500-1000 файлов) с нашего сайта , Мы разместили код, но он занимает больше времени для выполнения, и, поскольку у нас есть наш веб-сайт, размещенный в Azure Web app, он получает 500 запросов времени. Может ли кто-нибудь помочь нам показать, как мы можем улучшить и сделать это быстрее?Загрузите массовые изображения с Azure Blob C# - Время запроса запроса

Пожалуйста, найдите код, который мы сделали.

string[] pods; 
          string fileName = ""; 
          try 
          { 
           System.IO.Directory.CreateDirectory(path); 
           foreach (var item in objData) 
           { 
            pods = item.POD.Split(new string[] { "," }, StringSplitOptions.None); 
            foreach (var itemPOD in pods) 
            { 
             string[] data = itemPOD.Split(new string[] { "/" }, StringSplitOptions.None); 
             fileName = System.IO.Path.Combine(path, DateTime.Now.ToString("dd_MM_yyyy") + "_" + data[data.Length - 1]); 
             try 
             { 
              var stream = new WebClient().OpenRead(itemPOD); 
              using (System.Drawing.Image img = System.Drawing.Image.FromStream(stream)) 
              { 
               img.Save(fileName, System.Drawing.Imaging.ImageFormat.Jpeg); 
               GC.Collect(); 
              } 
             } 
             catch (Exception) 
             { 

             } 
            } 
           } 
           FileDownloads objFileDownload = new FileDownloads(); 
           var filesCol = objFileDownload.GetFile(path); 
           using (var memoryStream = new MemoryStream()) 
           { 
            using (var ziparchive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true)) 
            { 
             for (int i = 0; i < filesCol.Count; i++) 
             { 
              ziparchive.CreateEntryFromFile(filesCol[i].FilePath, filesCol[i].FileName); 
             } 
            } 
            return File(memoryStream.ToArray(), "application/zip", "Attachments.zip"); 
           } 
          } 
          catch (Exception) 
          { 

          } 
+2

Вместо того, чтобы делать это в веб-приложение, вы можете не сделать это в какой-то фоновый процесс? –

+1

Это действительно должно быть сделано с использованием фонового процесса. Кроме того, почему вы не распараллеливаете загрузки? И используйте асинхронный метод 'OpenRead', см. Https://msdn.microsoft.com/en-us/library/system.net.webclient.openreadasync(v=vs.110).aspx. Если вы переключитесь на 'HttpClient', вы можете использовать' async' с 'await'. Например, с помощью метода GetStreamAsnc: https://msdn.microsoft.com/en-us/library/hh551738(v=vs.118).aspx. –

+0

Да, я думал о том же, чтобы переместить его в фоновом режиме, но снова пользователь должен быть уведомлен в реальном времени, как только файл zip будет готов к загрузке, так что сигнал signalR появится на картинке. – Chidrup

ответ

0

Мы храним наши файлы в Azure Blob, мы даем вариант нашему пользователю загружать несколько файлов в формате ZIP (может быть 500-1000 файлы) с нашего сайта. Мы разместили код, но он занимает больше времени для выполнения, и, поскольку у нас есть наш веб-сайт, размещенный в Azure Web app, он получает 500 запросов времени.

Кажется, что вы получаете решение с помощью Гаурава Мантри и Питера Бонса. Выполнение длительных задач в фоновом потоке будет лучше, чем выполнение этого действия в коде действия контроллера. Согласно вашему описанию, вы размещаете приложение на веб-сайте Azure, Azure WebJob будет хорошим выбором для запуска вашей задачи, чтобы заархивировать несколько файлов. Кроме того, если вы хотите направить уведомление клиенту с помощью Signalr, вам может понадобиться map users to their connections и сохранить информацию о пользователе & connectionid & zipfile, а затем вы можете вызвать метод Signalr hub из WebJob, чтобы направить уведомление конкретному пользователю, чтобы позволить он знает, что файл zip готов.

Следующие ссылки обсуждались в разделе «Общение с Azure WebJob на веб-сайт с помощью SignalR», что было бы полезно.

  1. Communicate from an Azure WebJob to your website with SignalR
  2. Communication between a WebJob and SignalR Hub
Смежные вопросы