2

首先,如果这是一个菜鸟问题,请原谅我 - 但我是新手protobuf-net

我注意到有些人TypeModel.Create()在序列化时使用 with protobuf-net,而其他人只是Serializer直接调用(意思是使用默认的单例RuntimeTypeModel.Default)。

有什么区别?我会假设如果我一直重复使用相同RuntimeTypeModel.Default的东西,我会获得一些性能优势,但我放弃了什么作为交换?

如果我在调用序列化时已经知道Type我的对象,哪种方法更好?

谢谢

4

1 回答 1

2

ķ; 现在的方法Serializer.*主要用作RuntimeTypeModel.Default.*. 它们仍然存在的三个原因:

  • 方便
  • 许多现有的示例代码
  • v1 API 兼容性

大多数人只需要一个模型。但是,如果您需要,系统支持具有不同配置的不同并行模型。然而,在大多数情况下,这不太可能:它确实使它更易于测试,因为我可以简单地使用不同的模型实例来重置整个系统。所以:你可以(如果你愿意,大多数人不会)有多个模型实例的原因:

  • 测试,主要是我:)
  • 在不同的布局/版本之间迁移

TypeModel顺便说一句,如果您使用“预编译”功能(主要针对电话设备之类的东西), API 也会暴露出来。这将生成具有自定义模型类型的程序集,可通过以下方式使用:

var serializer = new MyCustomSerializer();

where MyCustomSerializer : TypeModel- 虽然在这种情况下它不会是RuntimeTypeModel.

于 2013-02-17T03:52:47.730 回答