0

我正在尝试在 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 Functions 中达到某种内存限制?在我遇到那个错误之前花了很长时间,这让我觉得这是一个 OOM 的事情。此 TIF 文件非常大(80Mb 和 10,000 页)。

4

1 回答 1

1

我明白了这一点 - 事实证明,位图操作在运行 blob 流时一点也不开心。性能很糟糕(可能慢了 100 倍),对大文件的操作会因我上面提供的错误而失败。

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

于 2018-05-18T17:19:06.993 回答