【发布时间】:2012-08-10 16:20:00
【问题描述】:
我有一个 WCF 服务处理大量请求(每秒数千个)。每个请求都包含对象,因此它们在反序列化期间构建在 DataContractSerializer 中。我的服务会处理这些消息,然后它们会被 .net 垃圾收集器清理掉。
问题是垃圾收集导致我的服务出现问题(请求有时会比应有的时间长 100 多毫秒)。我需要尽量减少它们。所以我正在寻找一种使用对象池的方法。换句话说,我希望数据契约序列化程序从我的对象池中获取一个对象(而不是通过 GetUninitializedObject 获取一个),然后当我处理完消息后,我会将其释放回池中进行清理和重用,从而避免每秒数千次内存分配。
我已经看到 protobuf-net (Using protobuf-net, is it possible to deserialize a message without allocating memory?) 可以做到这一点,实际上我在其他地方使用了 protobuf,但对于这种特殊情况,这不是一个选项
【问题讨论】:
-
你要找的不是对象池而是缓存。
标签: wcf garbage-collection datacontractserializer