如何在Google.Protobuf C#中从池中分配复合对象

时间:2017-04-06 22:39:41

标签: c# protocol-buffers protobuf-csharp-port

我在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创建顶级自定义解析器,但是如何更改它用于创建嵌套对象的解析器(或工厂)?

0 个答案:

没有答案