Насколько дорого стоит создание экземпляров CloudStorageAccount или CloudBlobClient с точки зрения производительности?

Должен ли я создавать экземпляры CloudStorageAccount и CloudBlobClient каждый раз, когда я хочу получить blob из хранилища? Например, я применил собственный поставщик виртуального пути для работы с хранилищем памяти. Какое лучшее дизайнерское решение: создание экземпляров CloudStorageAccount и CloudBlobClient один раз как частные поля моего пользовательского поставщика виртуальных путей или использование утилиты со статическими (совместно используемыми) методами, которая создает экземпляры CloudStorageAccount и CloudBlobClient каждый раз, когда я хочу получить blob из место хранения? Насколько это дорого с точки зрения производительности?

Ответы

Ответ 1

Вы можете повторно использовать CloudStorageAccount и CloudBlobClient, так как они не имеют состояния (см. ответ Стива Маркса в ссылке Саймона). SDK является открытым исходным кодом, и вы можете просто посмотреть источник на GitHub.

Если вы посмотрите на класс CloudStorageAccount, вы увидите, что его основная цель - убедиться, что вы закончили с StorageCredentials с помощью Blob/Queue и TableEndpoint. Если посмотреть на конструктор CloudBlobClient, вы увидите, что он хранит учетные данные хранилища, конечную точку Uri и некоторые значения по умолчанию.

Здесь нет ничего сложного, и нет никакого сетевого ввода-вывода, означающего, что обработка очень дешевая. Но когда вы думаете о производительности, каждая небольшая оптимизация может помочь, поэтому вы можете спокойно хранить ее в статической переменной (это может повлиять на тестирование устройства), или если вы используете контейнер IoC, вы можете выбрать один экземпляр для всего контейнера.

Теперь вам нужно что-то учитывать. Оба CloudStorageAccount и CloudBlobClient будут сохранять учетные данные и конечную точку Uri. Но что, если вы измените эту информацию через портал (возможно, вы изменили ключ учетной записи хранилища)? Если вы храните один экземпляр CloudStorageAccount/CloudBlobClient, вам может потребоваться обработать событие RoleEnvironment.Changing, чтобы обновить эти объекты с помощью нового хранилища информация о счете.