我在C#中使用Google.Protobuf 3.2.0实现。我正在尝试让它从池中分配对象。这样做的原因是它们需要通过队列传递到另一个线程进行处理,我希望我的应用程序是garbage-free in steady state running。
对于一个简单的对象来说这很容易。
E.g。使用以下proto文件:
syntax = "proto3"
message SimpleMessage {
int32 number = 1;
}
我可以实现自定义解析器:
var parser = new MessageParser<SimpleMessage>(() =>
{
// allocate from pool
return pool.GetObject();
});
parser.ParseDelimitedFrom(stream)
每次需要新对象时都会调用该委托,因此我可以实现一个池。
但是如何对具有嵌套成员的复合对象执行此操作?
syntax = "proto3"
message CompoundMessage {
oneof Alternatives {
SimpleMessage1 simple1 = 1;
SimpleMessage2 simple2 = 2;
}
}
我可以为CompoundMessage创建顶级自定义解析器,但是如何更改它用于创建嵌套对象的解析器(或工厂)?