Protobuf运行时和静态标签方法之间是否有任何开销差异?

时间:2013-10-23 22:26:55

标签: performance tags runtime protocol-buffers protobuf-net

我们在.netcf目标上使用Probuf。一切都很好。我开始使用静态[ProtoContract],[ProtoMember,1]等。我的同事担心增加类对象的潜在开销,所以我切换到运行时模型与.add(#,“”)似乎更多与相关课程“断开连接”。我实际上更喜欢类中的静态标记,因为如果稍后重构变量名,则名称本身就会更新。由于我不知道protobuf在底层是怎么做的,在开销,速度等方面使用静态标签与运行时模型有什么优点或缺点。

谢谢!

1 个答案:

答案 0 :(得分:0)

我没有广泛地描述这个方面 - 主要是因为属性上的反射的任何开销只进行一次。冷启动性能可能略有不同,但是:如果最终的启动性能是您的目标,那么理想情况下应该尝试使用谷歌代码下载中提供的预编译器。此与属性模型一起使用,但具有以下优点:使用预编译模型时,运行时不会发生反射无论。它还将生成纯IL,其中CF通常非常受限制,因此IIRC的运行时使用被迫使用一些反射,即使对于成员访问这样的事情也是如此。最后,这意味着您可以使用“CoreOnly”而不是“Full”构建,这种构建更小,更简单。

http://marcgravell.blogspot.co.uk/2012/07/introducing-protobuf-net-precompiler.html