我正在使用第三方网络库,为了发送网络消息,我需要创建 NetworkMessage
类的新实例。这是低效的,因为应用程序需要运行得非常快,并且发送的消息很多,所以我正在寻找一种方法来避免为每条消息动态分配内存。
如果 NetworkMessage
是一个结构,那么我们就不会有问题。此外,我无法存储多个预先创建的 NetworkMessage
实例,因为消息参数只能在构造函数中传递,以后无法更改。我无法更改 NetworkMessage
类中的任何内容,因为它是第三方。
有没有一种方法可以在 C# 中创建一个内存池,然后使用类似于 C++ 中的 placement new 运算符的方法从该池中创建对象? (我知道 C# 中没有 placement new 运算符)。我正在寻找一种方法来初始化一 block 内存,然后使用该内存块从中创建 NetworkMessage
类的实例。
最佳答案
在我们继续之前,请注意:内存分配在 .NET 中非常高效。它不像在 COM 中那样是一个昂贵的操作。
话虽如此,我看到了两个解决方案:
您可以做的一件事是简单地自己创建一个 NetworkMessage 实例池。然后您可以使用一个简单的管理器类获取它们并从池中释放它们。
另一种选择是使用控制反转容器,例如Castle Windsor , Unity或 NInject .此类容器会为您处理依赖项创建和对象生命周期管理。
祝你好运!
关于c# - 自定义内存分配器或内存池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9063038/