我需要一种简单的方法将Memory2D
CommunityToolkit.HighPerformance 包转换为简单的 1D 集合形式。列表 / 数组 / 任何类似 1D 的东西。
我自己认为最好的方法是MyMemory2D.ToArray().AsSpan().ToArray()
这是好方法吗?有没有更快/最佳的方法?
我需要一种简单的方法将Memory2D
CommunityToolkit.HighPerformance 包转换为简单的 1D 集合形式。列表 / 数组 / 任何类似 1D 的东西。
我自己认为最好的方法是MyMemory2D.ToArray().AsSpan().ToArray()
这是好方法吗?有没有更快/最佳的方法?
有没有更快/最佳的方法?[1] - 您的方法创建一个临时的 2D 数组(通过第一次调用
[1] 至于这是否是最简单或最好的方法,这是一个见仁见智的问题。ToArray()
),然后立即通过第二次调用从中创建最终的 1D 数组。ToArray()
通过分配正确大小的 1D 数组,然后直接复制到该数组上,可以更快、更有效地跳过中间 2d 数组的构造:正如 dbc 正确指出的那样,
ToArray
将分配一个额外的数组,这将损害性能。除了建议的方法外,您还可以利用以下Memory2D<T>.CopyTo
方法:这在我的计算机上似乎具有相同的性能(通过BenchmarkDotNet):
请注意,有如下
Memory2D<T>.TryGetMemory
方法Span2D<T>.TryGetSpan
:并且可以在某些情况下使用。
最好的办法就是根本不做任何复制。只需将
Span2D<T>
其删除,然后Span<T>
从中创建一个法线。您还可以使用枚举器和
foreach
。