我有一个 WCF 服务处理大量请求(每秒数千个)。每个请求都包含对象,因此它们在反序列化期间构建在 DataContractSerializer 中。我的服务处理这些消息,它们被 .net 垃圾收集器清理。
问题是垃圾收集给我的服务带来了问题(请求有时会比应有的时间长 100 多毫秒)。我需要尽量减少它们。所以我正在寻找一种使用对象池的方法。换句话说,我希望数据契约序列化程序从我的对象池中获取一个对象(而不是通过 GetUninitializedObject 获取一个),然后当我处理完消息后,我会将其释放回池中进行清理和重用,从而避免每秒数千次内存分配。
我已经看到使用 protobuf-net 是可能的(使用 protobuf-net,是否可以在不分配内存的情况下反序列化消息?)实际上我在其他地方使用 protobuf,但对于这种特殊情况,这不是一个选项