Параметр генерирования функции Azure недействителен при вызове Image.FromStream в большом файле TIF

Я пытаюсь обработать многостраничные файлы TIF в функции Azure. Функция запускается при изменении хранилища BLOB-объектов. Когда триггер запускается, он вызывает это:

function loadFile(Stream mpTif);
     Bitmap pageOnes = (Bitmap)Image.FromStream(mpTif);

mpTif - это поток хранилища больших двоичных объектов, который передается непосредственно в функцию Azure.

Моя функция отлично работает с небольшими многостраничными файлами TIF, но когда я помещаю очень большой файл в хранилище BLOB-объектов, он не работает Image.FromStream с ошибкой:

Параметр недействителен

Я запускаю это на своем компьютере, используя локальный функциональный хост. Странно то, что у меня есть консольное приложение, которое запускается с использованием того же кода, но вместо этого вызывает его с помощью MemoryStream:

MemoryStream data = new MemoryStream(File.ReadAllBytes("big.tif"));
loadFile(data);

Это прекрасно работает. Наступил ли какой-то предел памяти в Функциях Azure? Подозрительно много времени проходит, прежде чем я обнаруживаю эту ошибку, что заставляет меня думать, что это проблема OOM. Этот файл TIF очень большой (80 МБ и 10 000 страниц).


person Chris Rae    schedule 17.05.2018    source источник
comment
Я подозреваю, что это может быть немного больше, потому что даже в небольших файлах TIF все операции с изображениями при работе на хосте функций намного медленнее, чем они выполняются обычно. Неужели он каким-то странным образом оборачивает функции GDI?   -  person Chris Rae    schedule 18.05.2018
comment
Вы проверяли это в официальном руководстве? github.com/Azure-Samples/ функция-изображение-загрузка-изменение размера / blob /   -  person kamil-mrzyglod    schedule 18.05.2018
comment
Спасибо, но я не думаю, что это то, о чем этот учебник.   -  person Chris Rae    schedule 18.05.2018


Ответы (1)


Я разобрался с этим - оказалось, что операции с растровыми изображениями совсем не годятся для работы с потоками BLOB-объектов. Производительность ужасная (возможно, в 100 раз медленнее), а операции с большими файлами просто завершаются ошибкой, которую я указал выше.

Я решил все свои проблемы, скопировав входящий поток в MemoryStream, используя код, представленный на странице https://stackoverflow.com/a/3212765/498949, прежде чем выполнять какие-либо операции с растровым изображением.

person Chris Rae    schedule 18.05.2018
comment
У меня точно такая же проблема. Действительно разрушающая производительность - person ghostbust555; 21.08.2020