不同大小对象的内存池-C#

不同大小对象的内存池-C#,c#,memory,garbage-collection,memory-pool,C#,Memory,Garbage Collection,Memory Pool,您是否有一些解决方案,如何使对象池(内存池)中的对象可以包含不同大小的数据?所以,如果我请求内存池中某个大小的对象,它会返回一些分配的内存块,其大小与我的请求最接近。它应该用C#书写。谢谢你,因为我真的不知道,什么是这个最好的收集和最好的算法。在C++中,有一些解决方案,但是对于C语言没有内存池。 .NETFramework已经有这样的实现(Windows通信基金会使用)。看 那是因为你不需要它。。。在C#中,内存管理由CLR处理。或者,在您的情况下,为什么需要进行显式内存管理?您需要它做什么?

您是否有一些解决方案,如何使对象池(内存池)中的对象可以包含不同大小的数据?所以,如果我请求内存池中某个大小的对象,它会返回一些分配的内存块,其大小与我的请求最接近。它应该用C#书写。谢谢你,因为我真的不知道,什么是这个最好的收集和最好的算法。在C++中,有一些解决方案,但是对于C语言没有内存池。

.NETFramework已经有这样的实现(Windows通信基金会使用)。看


那是因为你不需要它。。。在C#中,内存管理由CLR处理。或者,在您的情况下,为什么需要进行显式内存管理?您需要它做什么?如果我没记错的话,内存池是用来避免堆碎片的。在C#中,垃圾收集应该负责这些事情,所以您不需要它。是的,我知道,我必须编写通信库,它允许客户端与服务器通信(通过特定的自有协议),客户端(或多个客户端)向服务器发送数据,数据以消息(字符串)+数据的形式存在(大小和格式不同)。但这种通信可以连续运行两到三周而不中断,因此它可以在通信期间发送数千条带有数据的消息。我的老板告诉我,他认为垃圾收集不够好,我应该编写内存池。但在这方面,我没有技能(内存块等等)谢谢!这似乎就是我要找的
var buffMgr = BufferManager.CreateBufferManager(
                 104857600, // use no more than 100 MB in total
                 10485760);  // allocate 10 MB max to each buffer
var buff = buffMgr.TakeBuffer(65535); // allocate a buffer enough to fit a 65 KB object
                           // note: this could return a buffer bigger than 65 KB 

//when done with the buffer:
buffMgr.ReturnBuffer(buff);