【发布时间】:2014-10-22 08:50:08
【问题描述】:
我已阅读Protobuf-net memcache provider fails on append/set ArraySegment,它说它可能会在某个时候得到支持。
我也试过那个问题中建议的测试,表明2.0.0.668版本不支持。
有没有人成功使用 ArraySegments 和 protobuf-net,或者有想法通过网络发送字节数组的有效方法。
即我有一个这样的对象:
[ProtoContract]
class Foo
{
[ProtoMember(1)]
public byte[] Data { get; set; }
}
我想将一个不同的对象 T 序列化为一个字节数组,将其分配给 Data,然后将 Foo 序列化为另一个字节 []。 (听起来效率低下,但 Foo 类必须与类型无关,它可以是泛型的吗?)。
关键是我希望尽量减少分配/GC,所以我想在每次序列化数据时尽量减少数组的复制或新数组的分配。
这里是一些示例代码,它展示了我想要更有效地实现的目标:
public class DataSender<T>
{
private ISerializer serializer; //Could be any kind of binary serializer
public void Send(T obj)
{
MemoryStream serializationBuffer = new MemoryStream(); // Inefficent allocation
serializer.Serialize(serializationBuffer, obj);
var sendable = new Foo(){ Data=serializationBuffer.ToArray() } // Inefficent copy
Sender.Send(sendable);
}
}
非常欢迎任何关于替换我的 Foo 对象和/或发送代码的建议。
【问题讨论】:
-
感谢格式编辑,从我的手机发布!
-
短版:“不,目前没有”。代码可能并不难——只是时间问题(永远不够)/工作(总是太多)
标签: c# serialization protobuf-net binary-serialization