我正在尝试在 Azure 函数中处理多页 TIF。该函数由 blob 存储的更改触发。当触发器运行时,它会调用:
function loadFile(Stream mpTif);
Bitmap pageOnes = (Bitmap)Image.FromStream(mpTif);
mpTif
是直接传递到 Azure Function 的 Blob 存储流。
我的函数在小型多页 TIF 文件上运行良好,但是当我将一个非常大的文件放入 blob 存储中时,它会失败Image.FromStream
出现错误:
参数无效
我使用本地函数主机在自己的计算机上运行它。奇怪的是,我有一个控制台应用程序,它使用完全相同的代码运行,但使用 MemoryStream 调用它:
MemoryStream data = new MemoryStream(File.ReadAllBytes("big.tif"));
loadFile(data);
这很好用。我是否达到了 Azure Functions 中的某种内存限制?令人怀疑的是,我花了很长时间才遇到这个错误,这让我认为这是一个 OOM 问题。此 TIF 文件非常大(80Mb 和 10,000 页)。
我深入了解了这一点 - 事实证明位图操作根本不高兴运行 blob 流。性能很糟糕(可能慢 100 倍),对大文件的操作会失败,并出现我上面提供的错误。
我通过使用以下位置提供的代码将传入流复制到 MemoryStream 解决了所有问题https://stackoverflow.com/a/3212765/498949在对其执行任何位图操作之前。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)