Azure函数抛出“参数无效”,在大型TIF文件上调用Image.FromStream

时间:2018-05-17 19:47:39

标签: .net azure azure-functions azure-functions-runtime

我正在尝试在Azure功能中处理多页TIF。该功能由blob存储的更改触发。当触发器运行时,它会调用:

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

mpTif是直接传递到Azure函数的blob存储流。

我的函数在小型多页TIF文件上工作正常,但是当我在blob存储中放入一个非常大的文件时,它在Image.FromStream上失败并出现错误:

  

参数无效

我使用本地功能主机在自己的机器上运行它。奇怪的是,我有一个控制台应用程序使用完全相同的代码运行,但使用MemoryStream调用它:

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

这很好用。我在Azure功能中遇到某种内存限制吗?在我遇到这个错误之前需要很长时间,这让我认为这是一个OOM的事情。这个TIF文件非常大(80Mb和10,000页)。

1 个答案:

答案 0 :(得分:0)

我已经深究了这一点 - 事实证明Bitmap操作完全没有跑掉Blob Streams。性能非常糟糕(可能慢了100倍),大文件上的操作因上面提供的错误而失败。

我通过使用https://stackoverflow.com/a/3212765/498949提供的代码将传入的Stream复制到MemoryStream,然后对其执行任何Bitmap操作,解决了我的所有问题。