C# ref struct和ref class的特点

①C#中的ref struct是一种特殊的结构类型,它只能在栈上分配,不能逃逸到托管堆上。这样可以避免垃圾回收和装箱拆箱的开销,提高性能。

②在ref struct里面以ref方式声明一个struct成员的作用是让该成员也只能在栈上分配,不能被复制或传递给其他变量。这样可以保持ref struct的语义和约束,防止内存泄漏或不安全操作。

③ref struct 主要是用来减少GC,比如声明变量的时候可以用它来在不同对象中传递指向连续内存地址的数据,虽然会降低灵活性,不如List之类的工具功能强大,但在处理一些特定的数据的时候能给你更高的效率。

比如图片,如果已知图片的原始格式,就可以通过 Span 对内存中 Image 类所提供的地址来获取这个连续的 byte[] 的指针,并通过 Span 的方法可以进行数据拆分,比如从 32 ARGB 中提取每个 ARGB 的 Span ( 依然是个指向原始数据片段的指针 )
就不需要用如 - var argb = byte[4] 这种变量来降低执行效率,因为用完之后 argb 会被GC。

比如在循环中你要对每个颜色进行运算,那么可以通过直接划分两个连续的内存片段,然后对 Span 进行计算。计算过程可以使用 buffer 也可以直接创建个大的中间层来提高效率 (但会占用更多内存)

ref 结构类型 C#参考 ref 结构类型 - C# 参考 | Microsoft Learn

你可能感兴趣的:(c#,开发语言)