ArrayPool是.NET轻量级线程安全数组池,用于减少GC压力;需租借后配对归还,避免泄漏;正确使用需注意长度边界、清零策略及适用场景。
c#高性能数组池化技术">
ArrayPool
每次 new byte[4096] 都会触发堆分配;高频调用时容易产生大量 Gen 0 对象,增加 GC 频率。而 ArrayPool
租借后必须配对归还,否则池中可用数组减少,可能退化为每次都 new。推荐用 try/finally 或 using(C# 8+ 支持 IDisposable 的池实例):
using var buffer = ArrayPool<byte>.Shared.Rent(8192);<br> // 使用 buffer.Array,注意长度是 buffer.Length,不是 buffer.Array.Length
var buffer = ArrayPool<byte>.Shared.Rent(8192);<br>
try { /* 使用 */ }<br>
finally { ArrayPool<byte>.Shared.Return(buffer); }Shared 是开箱即用的默认池,适合通用场景。如需定制(比如限制最大数组大小、控制池容量或启用清零),可继承 ArrayPool
ArrayPool<byte>.Create(maxArrayLength: 65536, maxArraysPerBucket: 50)</byte> —— 控制单桶最大长度和数量clearArray: true 可让 Return 时自动清零(防止数据残留,但有性能开销)Rent/Return,一般没必要,除非有特殊复用逻辑(如按用途分池)数组池不是万能银弹,用错反而影响性能:
buffer.Length,不是你传的 size —— 别越界写基本上就这些。用好 ArrayPool
以上就是C#如何使用ArrayPool C#高性能数组池化技术的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号