Mik*_*scu
5
我会将内存碎片添加到列表中.当使用封装本机资源的对象时,可能会发生这种情况,这些资源在分配后无法由垃圾收集器移动,并且可能会使堆碎片化.
一个真实的例子是当你创建和销毁大量套接字时.他们用来读取/写入数据的缓冲区必须固定,以便传输到本机WinSock API,这意味着当垃圾收集发生时,即使某些内存被回收用于被破坏的套接字 - 它可能会留下内存处于碎片状态,因为GC在收集后无法压缩堆.因此,读/写缓冲区是池的主要候选者.此外,如果您正在使用SocketEventArgs对象,那些也是很好的候选对象.
这是一篇很好的文章,讨论垃圾收集过程,内存压缩以及对象池有用的原因.