проблема с производительностью: генерация большого количества подписей общего доступа к большим двоичным объектам происходит очень медленно

#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:

В приведенном выше коде я неоднократно получаю ссылку на контейнер. Это приводит к серьезному снижению производительности. Для решения проблемы я сохраняю контейнеры в частном кэше и получаю их только один раз.