#c# #azure #azure-storage #azure-blob-storage
#c# #azure #azure-storage #azure-blob-storage
Вопрос:
Мне интересно, какой наиболее эффективный способ удалить каталог (или просто пакет больших двоичных объектов, если на то пошло — я осведомлен о том факте, что хранилище Azure не имеет концепции каталогов или папок) с использованием c #. Прямо сейчас я использую параллельное удаление (используя Parallel.Для каждого) из всех больших двоичных объектов в папке — требуется около минуты для 420 больших двоичных объектов, общий размер которых составляет 11 МБ.
Код выглядит примерно так:
Parallel.ForEach(urisToDelete.Distinct(), uri => {
var blobReference = await this.cloudBlobClient.GetBlobReferenceFromServerAsync(uri);
await blobReference.DeleteAsync();
});
Я пытаюсь оптимизировать этот процесс и наткнулся на эту документацию Microsoft о пакетном удалении. Немного сложно изменить его в моем проекте для тестирования производительности. Кто-нибудь знает, повышается ли производительность при использовании этого метода удаления? Кто-нибудь знает лучший метод?
Большое спасибо!
Ответ №1:
Да, batch deletion
через пакетный клиент обеспечивает более высокую производительность, чем при использовании Parallel.ForEach(xxx)
.
Поскольку batch delete
будет выполнять несколько операций удаления хранилища больших двоичных объектов Azure в одном запросе, что действительно имеет более высокую производительность. Но при использовании Parallel.ForEach
он будет отправлять много запросов и приведет к снижению производительности.
Но вы должны знать ограничение при его использовании, например, один пакет поддерживает только до 256 подзапросов и т.д. Вы можете прочитать эту статью для получения более подробной информации об этом.
Насколько я знаю, это лучший по производительности способ удаления файлов с несколькими большими двоичными объектами.