#performance #azure-blob-storage
#Производительность #azure-blob-storage
Вопрос:
у нас есть сайт, работающий в Azure. мы используем службу хранения Azure для хранения нашего статического содержимого (изображений, видео и т. Д.).
у нас есть страница, на которой мы показываем таблицу со списком элементов, и для каждого элемента мы показываем уменьшенное изображение. Эскизы хранятся в службе хранения, и мы выделяем подпись общего доступа для каждого из них, используя следующий код:
...
CloudStorageAccount storageAccount;
if (!CloudStorageAccount.TryParse(connectionString, out storageAccount))
{
throw new Exception("...");
}
var blobClient = storageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
var blob = container.GetBlockBlobReference(blobName);
var policy = new SharedAccessBlobPolicy
{
Permissions = SharedAccessBlobPermissions.Read,
SharedAccessStartTime = DateTime.UtcNow.AddMinutes(-5),
SharedAccessExpiryTime = DateTime.UtcNow.AddMinutes(10)
};
var signature = blob.GetSharedAccessSignature(policy);
return blob.Uri.AbsoluteUri signature;
...
Это делается в цикле, выделяя отдельный SAS для каждого изображения в списке. Однако по мере роста списка происходит очень значительное снижение производительности. Для более 10-20 изображений загрузка страницы занимает очень много времени). Та же страница без генерации SAS загружается немедленно.
Есть ли способ ускорить это?
спасибо,
Комментарии:
1. и веб-сайт, и хранилище находятся в одном географическом местоположении
Ответ №1:
В приведенном выше коде я неоднократно получаю ссылку на контейнер. Это приводит к серьезному снижению производительности. Для решения проблемы я сохраняю контейнеры в частном кэше и получаю их только один раз.