Хорошо, вот что я сделал.Я возился с запуском BeginUploadFromStream (), затем BeginSetMetadata (), затем BeginSetProperties () в асинхронной цепочке, параллельно 5-10 потокам (комбинация предложений ElvisLive и knightpfhor).Это сработало, но все, что для 5 потоков имело ужасную производительность, для завершения каждого потока требовалось более 20 секунд (работая на странице из десяти изображений одновременно).
Итак, чтобы подвести итоги различий в производительности:
- Асинхронный: 5 потоков, каждый из которых выполняет асинхронную цепочку, каждый из которых работает с десятью изображениями одновременно (разбит на страницы по статистическим причинам): ~ 15,8 секунд (на поток).
- Синхронный: 1 поток, десять изображений одновременно (разбит на страницы по статистическим причинам): ~ 3,4 секунды
Хорошо, это довольно интересно.В одном подходе загрузка двоичных объектов синхронно выполнялась в 5 раз лучше, чем каждый поток в другом подходеИтак, даже при наилучшем асинхронном балансе из 5 потоков обеспечивает практически одинаковую производительность .
Итак, я настроил импорт файлов изображений, чтобы разделить изображения на папки, содержащие по 10 000 изображений в каждой.Затем я использовал Process.Start (), чтобы запустить экземпляр моего загрузчика BLOB-объектов для каждой папки.У меня есть 170 000 изображений для работы в этом пакете, что означает 17 экземпляров загрузчика.При запуске всех из них на моем ноутбуке производительность на всех них нивелируется на ~ 4,3 секунды на набор .
Короче говоря, вместо того, чтобы пытаться оптимизировать работу потоков, я простозапускать экземпляр загрузчика BLOB-объектов для каждых 10 000 изображений одновременно на одном компьютере.Общее повышение производительности?
- Асинхронные попытки: 14-16 часов , основанные на среднем времени выполнения при работе в течение часа или двух.
- Синхронный с 17 отдельными экземплярами: ~ 1 час, 5 минут.