我在 C# 中使用 Google.Protobuf 3.2.0 实现。我试图让它从池中分配对象。这样做的原因是它们需要通过队列传递给另一个线程进行处理,并且我希望我的应用程序在稳定运行状态下是无垃圾的。
对于一个简单的对象来说,这很容易。
例如,使用以下 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 创建顶级自定义解析器,但是如何更改它用于创建嵌套对象的解析器(或工厂)?