【发布时间】:2018-10-11 19:24:28
【问题描述】:
我无法有效地将IList<byte> 转换为byte[]。我正在使用 Xamarin Studio 和 OpenCV 来处理图像和 Fotoapparat 来拍照。
我想将列表转换为数组,因为 OpenCV 需要一个数组而不是列表。我知道使用ToArray() 转换的“简单”方法,但它需要太多时间(转换超过 8-9 秒)。作为参考,我的IList<byte> 的长度为 5564448。
有谁知道如何有效地将IList<byte> 转换为byte[]?
【问题讨论】:
-
一开始为什么要在 List
中存储 5 MB 的数据? -
不知道实现 IList 的具体类。据我们所知,它可能是一个 FileStream - 因此转换成本与底层接口实现有关。
-
我怀疑有没有更好的方法。你查过源代码吗?
-
您的
IList<T>似乎对CopyTo的实现很慢,因为ToArray使用的是这种方式。但是您没有告诉我们您正在使用IList<T>的哪个实现,以及为什么(如果您需要可变长度缓冲区,MemoryStream可以工作)。 -
考虑更新 openCV 包装器以使用
Span和ReadOnlySpan,这样就不需要复制了。