Azure BLOBにファイルを保存しています.Zip形式で複数のファイルをダウンロードするオプションを提供しています(500-1000ファイル)。 。私たちはコードを書いていますが、実行に時間がかかり、Azure WebアプリケーションでホストされているWebサイトでは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のasyncメソッドを使用してください。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ファイルのダウンロード準備が整ったらリアルタイムで通知してください。 – Chidrup