我正在尝试在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页)。
答案 0 :(得分:0)
我已经深究了这一点 - 事实证明Bitmap操作完全没有跑掉Blob Streams。性能非常糟糕(可能慢了100倍),大文件上的操作因上面提供的错误而失败。
我通过使用https://stackoverflow.com/a/3212765/498949提供的代码将传入的Stream复制到MemoryStream,然后对其执行任何Bitmap操作,解决了我的所有问题。