.Net Core中内存的连续区域Span<T>与部分数组ArraySegment<T>

在.Net Core中,一个 Span<T> 表示任意内存的连续区域。 Span<T> 实例通常用于保存数组或某个数组的一部分的元素。 但与数组不同,Span<T> 实例可以指向托管内存、本机内存或在堆栈上管理的内存。可以认为是一个T类型的安全指针。Span<T>是一种高性能的数组操作。

可以将部分数组ArraySegment<T> 隐式转换为 内存的连续区域Span<T>

一、新建.net core控制台应用程序DotCoreDemo,目标框架选择 .Net Core 3.1。

键入如下测试代码:

using System;
using System.Linq;

namespace DotCoreDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            /*
             * .NET Core官方文档
             * https://docs.microsoft.com/zh-cn/dotnet/core/
             * .NET Core 是一个通用的开放源代码开发平台。 可以使用多种编程语言针对 x64、x86、ARM32 和 ARM64 处理器创建适用于 Windows、macOS 和 Linux 的 .NET Core 应用。 
             * 为云、IoT【物联网(The Internet of Things,简称IOT】、客户端 UI 和机器学习提供了框架和 API。
             * 一个 Span<T> 表示任意内存的连续区域。 Span<T> 实例通常用于保存数组或某个数组的一部分的元素。 但与数组不同,Span<T> 实例可以指向托管内存、本机内存或在堆栈上管理的内存。
            */
            int[] array = new int[] { 8, 4, 3, 5, 9 };
            Span<int> span = new Span<int>(array);
            int sum = 0;
            for (int i = 0; i < span.Length; i++)
            {
                sum += span[i];
            }
            Console.WriteLine($"使用Span【内存的连续区域】来测试:Sum={sum}");
            ArraySegment<int> segment = new ArraySegment<int>(array);
            Console.WriteLine($"使用ArraySegment【数组的一部分】来测试:Sum={segment.Sum()}");

            Span<int> implictSpan = segment;
            Console.WriteLine("可以将部分数组ArraySegment 隐式转换为 内存的连续区域Span");
            Console.WriteLine("获取内存的一部分,从第2个开始");
            Span<int> sliceSpan = implictSpan.Slice(2);//Slice:从指定的索引开始切片
            Console.WriteLine("遍历Slice切片后的元素:");
            foreach (int item in sliceSpan)
            {
                Console.WriteLine(item);
            }
            Console.WriteLine($"Slice切片后的元素之和:{sliceSpan.ToArray().Sum()}");
            Console.ReadLine();
        }
    }
}

二、程序运行如图:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

斯内科

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值