gpt4 book ai didi

c# - MemoryPool 和 ArrayPool 的区别

转载 作者:行者123 更新时间:2023-12-03 14:00:09 29 4
gpt4 key购买 nike

MemoryPool 和有什么区别和 ArrayPool据我所知,他们都做同样的事情(出租缓冲区以减少垃圾收集压力)。

在读取调用中是否应该首选使用池 NetworkStream WebSocket ?

最佳答案

ArrayPool<T>类出租数组。换句话说,Rent方法返回 T[] . Shared属性返回 ArrayPool<T> 的默认实现, TlsOverPerCoreLockedStacksArrayPool它以 ThreadStatic 的组合缓存后备数组存储桶数组和本地每核“堆栈”。它针对 char 进行了优化和 byte案件。 ConfigurableArrayPoolCreate 返回方法将底层数组存储在 Buckets 的数组中(每个都有自己的数组数组)。此外,您可以编写自己的实现。

另一方面,MemoryPool<T>更通用一点,因为它最终处理 Memory<T>对象。 Rent方法分发IMemoryOwner<T>实现,它们负责拥有一个 Memory<T> .内存所有者可以得到各种来源的支持,数组就是其中之一。 MemoryPool<T>.Shared单例实际上是一个 ArrayMemoryPool<T>你猜对了,这是由 ArrayPool<T>.Shared 支持的.但是内存池可能由不同的来源支持,例如由 SafeHandle 指向的非托管内存/内存。 .

使用哪一个实际上取决于您的要求:

  • 如果您使用的 API 需要 T[]或者你只是想要一个无分配数组,然后 ArrayPool<T>是你想要使用的。
  • 如果您正在使用 Memory<T>实例,那么您想使用 MemoryPool<T>

  • 如果您使用的 API 可以采用任何一种,那么使用一个池不一定比另一个更好。 API 本身可能与原始 T[] 一起工作得更好与 Memory<T> 相比(反之亦然),但 API 应该只关心内存本身,而不知道它来自的池。

    关于c# - MemoryPool<T> 和 ArrayPool<T> 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61856306/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com