改变span的内容_使用Span提高C#代码的性能

根据我的经验,提高应用程序性能的主要方法是减少IO调用的次数和持续时间。然而,一旦执行了这个选项,开发人员采取的另一种方式就是在堆栈上使用内存。堆栈允许非常快的分配和释放,尽管它应该只用于分配小的部分,因为堆栈大小是非常小的。另外,使用堆栈可以减少GC的压力。为了在堆栈上分配内存,将值类型或stackalloc操作符与非托管内存的使用结合使用。

第二个选项很少被开发人员使用,因为用于非托管内存访问的API非常冗长。

Span是C# 7.2中到达的一组值类型,它是来自不同来源的内存的无分配表示。Span允许开发人员以更方便的方式处理连续内存区域,确保内存和类型安全。

Span实现

Ref返回

对于那些不密切关注C#语言更新的人来说,了解Span实现的第一步是了解C# 7.0中引入的ref返回值。

虽然大多数读者都熟悉通过引用传递方法参数,但现在C#允许返回对值的引用,而不是值本身。

让我们来看看它是如何工作的。我们将为一组杰出的音乐家创建一个简单的包装,它既展示了传统的行为,又展示了新的ref返回特性。

public class ArtistsStore  {      private readonly string[] _artists = new[] { "Amenra", "The Shadow Ring", "Hiroshi Yoshimura" };        public string ReturnSingleArtist()      {          return _artists[1];      }        public ref string ReturnSingleArtistByRef()      {          return ref _artists[1];      }        public string AllAritsts => string.Join(", ", _artists);  }  

现在我们调用这些方法。

var store = new ArtistsStore();  var artist = store.ReturnSingleArtist();  artist = "Henry Cow";  var allArtists = store.AllAritsts; //Amenra, The Shadow Ring, Hiroshi Yoshimura    artist = store.ReturnSingleArtistByRef();  artist = "Frank Zappa";  allArtists = store.AllAritsts; //Am
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值