美文网首页
C# 中使用 ArrayPool池化数组来提升性能

C# 中使用 ArrayPool池化数组来提升性能

作者: 浅谈码生活 | 来源:发表于2021-10-20 17:39 被阅读0次

什么是 ArrayPool
System.Buffers 命名空间下提供了一个可对 array 进行复用的高性能池化类 ArrayPool<T>,在常常使用 array 的场景下可以使用 ArrayPool<T> 来减小内存占用,它是一个抽象类。使用重用模式,专为创建成本高的对象设计。池是预初始化对象的集合,可以跨线程保留和释放这些对象。 池可以定义分配规则,例如限制、预定义大小或增长率。
如何理解Pool
能够想象一下你的业务场景中须要屡次实例化 array,这么作有什么后果呢? 很显然每一次 new array 都会在托管堆上分配,同时当 array 再也不使用时还须要 GC 去释放,而 ArrayPool<T> 就是为了解决此事而生的,它在池中动态维护若干个 array 对象,当你须要 new array 的时候只需从池中获取便可。

未池化前:

  [HttpGet("array/{size}")]
        public byte[] GetArray(int size)
        {
            var random = new Random();
            var array = new byte[size];
            random.NextBytes(array);

            return array;
        }

池化后:

 [ApiController]
    [Route("api/[controller]")]
    public class PoolController : Controller
    {

        private static ArrayPool<byte> _arrayPool = ArrayPool<byte>.Create();
        public class PooledArray : IDisposable
        {
            public byte[] Array { get; private set; }

            public PooledArray(int size)
            {
                Array = _arrayPool.Rent(size);
            }

            public void Dispose()
            {
                _arrayPool.Return(Array);
            }
        }

        [HttpGet("pooledarray/{size}")]
        public byte[] GetPooledArray(int size) 
        {
            var pooledArray = new PooledArray(size); 
            var random = new Random();
            random.NextBytes(pooledArray.Array); 
            HttpContext.Response.RegisterForDispose(pooledArray);  //通过注册释放pooledArray对象
            return pooledArray.Array;
        }
    }

相关文章

  • C# 中使用 ArrayPool池化数组来提升性能

    什么是 ArrayPoolSystem.Buffers 命名空间下提供了一个可对 array 进行复用的高性能池化...

  • vuedose.tips(系列翻译二)

    在上一小节中,虽然我们对大型数组做了性能的提升操作,但是我们仍然不知道到底提升了多少性能。 我们可以使用Chrom...

  • C#委托 匿名函数 Lambda

    C# 中委托的发展#在 C# 1.0 中,通过使用在代码中其他位置定义的方法显式初始化委托来创建委托的实例。 C#...

  • 2017 10 31

    今天老师主要讲了c#中的数组、一维,多维,交错数组的使用,还有Array类的使用方法等。 数组:只包含单个序列的数...

  • Python之池化

    在Python的实现里广泛使用了内存池技术来提高性能,一些相同且无特殊意义的对象也常被池化,减少了对象数量以及内存...

  • .NET Core中double.ToString()的问题以及

    目前C#中double.ToString()的问题 .NET Core 2.0发布后,整个框架的性能提升了不少。但...

  • 池化技术

    池化技术 什么是池化技术 将对象放入池子,使用时从池中取,用完之后交给池子管理。通过优化资源分配的效率,达到性能的...

  • 数组笔记

    #数组 一.C#中的数组 (一)数组的存储 在C...

  • 2017-10-31学习总结

    星期二 晴 今天老师主要讲了c#中的数组、一维,多维,交错数组的使用,还有Array类的使用方法等。 跟原来学...

  • 使用jxl.jar在Android中操作Excel表格——重中之

    曾简单了解过C#,将Excel(数据库表)表中的数据导入到C#中,使用C#制作的图形化界面进行对Excel表中数据...

网友评论

      本文标题:C# 中使用 ArrayPool池化数组来提升性能

      本文链接:https://www.haomeiwen.com/subject/gkntaltx.html