You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CommunityToolkit.HighPerformance的Memory2D<T>转为一维集合?

Memory2D转一维集合的实现方案

你的方法MyMemory2D.ToArray().AsSpan().ToArray()是可行的,但完全没必要多做后面的AsSpan().ToArray()——MyMemory2D.ToArray()本身就直接返回了一维数组,额外的两步属于冗余操作,只会浪费内存和性能。

下面是几种更快更优的实现方式:

  • 直接获取一维数组:直接调用Memory2D<T>自带的ToArray()方法即可,这是官方优化过的实现,内部会高效复制内存,是性能最好的方式:

    T[] array = MyMemory2D.ToArray();
    
  • 转换为List的高效方式:如果需要转成List<T>,没必要先转数组再初始化List,可以直接利用Span<T>来减少一次内存分配:

    Span<T> span = MyMemory2D.AsSpan();
    List<T> list = new List<T>(span.Length);
    list.AddRange(span);
    
  • 自定义顺序的手动复制:如果需要按非默认顺序(比如列优先而非默认的行优先)生成一维集合,可以手动遍历并复制,性能和官方实现接近,但灵活性更高:

    T[] result = new T[MyMemory2D.Length];
    Span<T> destSpan = result.AsSpan();
    int offset = 0;
    
    // 列优先示例
    for (int col = 0; col < MyMemory2D.Width; col++)
    {
        var column = MyMemory2D.GetColumn(col);
        column.CopyTo(destSpan.Slice(offset));
        offset += column.Length;
    }
    

内容的提问来源于stack exchange,提问作者nuclear sweet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 00:02:04