Мы храним наши файлы в 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)
{
}
Вместо того, чтобы делать это в веб-приложение, вы можете не сделать это в какой-то фоновый процесс? –
Это действительно должно быть сделано с использованием фонового процесса. Кроме того, почему вы не распараллеливаете загрузки? И используйте асинхронный метод '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. –
Да, я думал о том же, чтобы переместить его в фоновом режиме, но снова пользователь должен быть уведомлен в реальном времени, как только файл zip будет готов к загрузке, так что сигнал signalR появится на картинке. – Chidrup