首页 文章详情

C# Inline Array

DotNet NB | 3 2023-10-24 10:14 0 0 0
UniSMS (合一短信)

C#12引入了内联数组(Inline Array)的特性,它允许开发人员创建固定大小的struct类型数组。具有内联缓冲区的结构可以提供类似于不安全的固定大小缓冲区的性能特性。使用内联数组可以避免函数调用和创建堆栈帧的开销,从而提高应用程序的性能。

使用需知:

  1. 固定大小: 内联数组一旦声明,其大小就是固定的,无法在运行时改变。
  2. 结构体类型: 内联数组中的元素必须是相同类型的结构体,不允许混合不同类型。
  3. 编译时确定: 数组的大小在编译时确定,因此在代码中使用时无法改变大小。
  4. 栈上分配: 内联数组是在栈上分配内存,相比堆上分配,栈上分配具有更快的访问速度,但大小受限。
  5. 性能优势: 内联数组的栈上分配可以提高访问速度,适用于对性能要求较高的场景。
  6. 需要命名空间: 在使用内联数组前,需要引入命名空间 System.Runtime.CompilerServices
  7. 不允许初始值设定项: 内联数组中的结构体字段不允许包含初始值设定项。
  8. 适用场景: 内联数组适用于需要固定大小且对性能要求高的场景,如高性能计算、嵌入式系统等。


代码示例

语法规定,在下面代码示例Buffer中只能定义一个字段,如果超过一个则编译不通过。

[System.Runtime.CompilerServices.InlineArray(10)]
public struct Buffer
{
    private int _element0;
}

var buffer = new Buffer();
for (int i = 0; i < 10; i++)
{
    //如果不加这个循环则输出的是int的默认值,如果是string输出的就是空字符串并不是null
    buffer[i] = i;
}

foreach (var i in buffer)
{
    Console.WriteLine(i);
}


推荐阅读:
使用 Foundatio 轻松构建 .NET 分布式应用
微服务必备,使用 .NET 实现分布式锁
推荐一个开源的 .NET 服务监控项目
C#/.NET/.NET Core优秀项目和框架2023年9月简报
推荐一个功能强大,接地气的 .NET 微服务框架
一个基于 .NET 7 + Vue.js 的前后端分离的通用后台管理系统框架 - DncZeus

点击下方卡片关注DotNet NB

一起交流学习

▲ 点击上方卡片关注DotNet NB,一起交流学习

请在公众号后台

回复 【路线图】获取.NET 2023开发者路线图
回复 【原创内容】获取公众号原创内容
回复 【峰会视频】获取.NET Conf开发者大会视频
回复 【个人简介】获取作者个人简介
回复 【年终总结】获取作者年终总结
回复 加群加入DotNet NB 交流学习群

长按识别下方二维码,或点击阅读原文。和我一起,交流学习,分享心得。


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter