加入收藏 | 设为首页 | 会员中心 | 我要投稿 文章分享网_茂名站长网 (https://www.0668zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

在C#中使用 ArrayPool,MemoryPool

发布时间:2021-03-31 14:09:19 所属栏目:外闻 来源:互联网
导读:以想象一下你的业务场景中需要多次实例化 array,这么做有什么后果呢?很显然每一次 new array 都会在托管堆上分配,同时当 array 不再使用时还需要 GC 去释放,而 ArrayPool 就是为了解决此事而生的,它在池中动态维护若干个 array 对象,当你需要 new array

以想象一下你的业务场景中需要多次实例化 array,这么做有什么后果呢?很显然每一次 new array 都会在托管堆上分配,同时当 array 不再使用时还需要 GC 去释放,而 ArrayPool 就是为了解决此事而生的,它在池中动态维护若干个 array 对象,当你需要 new array 的时候只需从池中获取即可。

使用 ArrayPool

可以通过下面三种方式来使用 ArrayPool 。

  • 通过 ArrayPool.Shared 属性来获取 ArrayPool 实例。
  • 通过 ArrayPool.Create() 来生成 ArrayPool 实例。
  • 通过继承 ArrayPool 来生成一个自定义子类。

下面的代码展示了如何从 ArrayPool 中获取一个 size >= 10 的 array 数组。

对资源的可复用是提升应用程序性能的一个非常重要的手段,比如本篇要分享的 ArrayPool 和 MemoryPool,它们就有效的减少了内存使用和对GC的压力,从而提升应用程序性能。

什么是 ArrayPool

System.Buffers 命名空间下提供了一个可对 array 进行复用的高性能池化类 ArrayPool,在经常使用 array 的场景下可使用 ArrayPool 来减少内存占用,它是一个抽象类,如下代码所示:

(编辑:文章分享网_茂名站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读