我已经阅读了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序列化到另一个byte[]中。尽管可能效率不高,但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对象的建议和/或代码发送,请随时告知。