c#中常用类或组件的使用场景(归纳总结)
c#中常用的池对象及其使用场景
C# 中有多个池化对象,可以通过这些对象来管理和重用内存,减少不必要的内存分配和释放开销。以下是一些常见的池化对象:
-
ArrayPool:用于管理
数组池
的类,可以重复使用数组内存,避免频繁的内存分配和垃圾回收。场景:高性能网络应用程序数据包处理/异步临时缓冲/大量数组计算 -
ObjectPool:用于管理
对象池
的类,可以重复使用对象实例,避免频繁的对象创建和销毁。 -
MemoryPool:用于管理
内存池
的类,可以预先分配一定数量的内存块(内存块是一块连续的内存区域
, 以byte数组的形式存在,可以用来存储各种类型的数据),并在需要时从池中获取这些内存块,以避免频繁的内存分配和释放,可以管理任意类型的内存块,包括数组和对象
等。 -
ConnectionPool:用于管理
数据库连接池
的类,可以重复使用数据库连接,避免频繁的数据库连接和断开操作。 -
ThreadPool:用于管理
线程池
的类,可以重复使用线程实例,避免频繁的线程创建和销毁。
// 数组池
var shared = ArrayPool<int>.Shared;
var rentedArray = shared.Rent(10); // 租用
rentedArray[0] = 1;
shared.Return(rentedArray); // 归还
// 内存池 MemoryPool 则提供了更通用的 Allocate、Free 等方法,可以用于管理任意类型的内存块
var memoryPool = MemoryPool<int>.Shared;
var rentedArray = memoryPool.Rent(10); // 租用
rentedArray.Memory.Span[0] = 1;
memoryPool.Return(rentedArray); // 归还
注意: 归还对象池时, 需要重置对象状态(重写其 Reset 方法)以避免脏数据
总之,C# 中有多个池化对象可供使用,这些对象可以帮助我们管理和重用内存、对象、连接等资源,从而提高性能和效率。 在应用程序中选择合适的池化对象是非常重要的,可以根据应用程序的特点和需求来选择合适的对象来管理资源。
MemoryPool 与 MemoryStream 对比
MemoryStream 常作为其他流数据交换时的中间对象操作, MemoryStream类封装一个字节数组,在构造实例时可以使用一个字节数组作为参数,但是数组的长度无法调整。使用默认无参数构造函数创建实例,可以使用Write方法写入,随着字节数据的写入,数组的大小自动调整。
MemoryStream 是一个用于在内存中创建和操作流数据的类。它可以将内存看作是一个数据流,并提供了读取和写入数据的方法。它通常用于将数据从其他数据源(如文件或网络)加载到内存中,或者将数据从内存保存到其他目标(如文件或网络)。MemoryStream 使用一个可变大小的内部缓冲区来存储数据,并且可以动态增长以容纳更多的数据。
最后更新于 2023-11-02 19:20:35 并被添加「」标签,已有 422 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
此处评论已关闭