Функция Azure выдает «параметр недопустим», вызывая Image.FromStream для большого файла TIF - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь обработать многостраничные 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 МБ и 10000 страниц).

1 Ответ

0 голосов
/ 18 мая 2018

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

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

...