C# TypeModel.Create的角色是什么?

C# TypeModel.Create的角色是什么?,c#,serialization,protobuf-net,C#,Serialization,Protobuf Net,首先,如果这是一个noob问题,请原谅,但我是新来的protobuf-net 我注意到一些人在使用protobuf-net进行序列化时使用TypeModel.Create(),而其他人则直接调用Serializer(意味着使用默认的单例RuntimeTypeModel.default) 有什么区别?我假设如果我一直重复使用相同的RuntimeTypeModel.Default,我会获得一些性能优势,但作为交换,我应该放弃什么呢 如果在调用序列化时我已经知道对象的类型,那么哪种方法更好 谢谢k;S

首先,如果这是一个noob问题,请原谅,但我是新来的
protobuf-net

我注意到一些人在使用
protobuf-net
进行序列化时使用
TypeModel.Create()
,而其他人则直接调用
Serializer
(意味着使用默认的单例
RuntimeTypeModel.default

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

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


谢谢

k;
Serializer.*
上的方法现在主要用作
RuntimeTypeModel.Default.*
的快捷方式。它们仍然存在的原因有三:

  • 方便
  • 大量现有的示例代码
  • v1api兼容性
大多数人只需要一个模型。但是,如果需要,系统支持具有不同配置的不同并行模型。然而,在大多数情况下,这是不可能的:它确实使它更易于测试,因为我可以使用不同的模型实例重置整个系统。所以:您可以(如果您愿意,大多数人不会)拥有多个模型实例的原因:

  • 测试,主要是me:)
  • 在不同布局/版本之间迁移
另一方面,如果您使用“预编译”功能(主要针对电话设备),那么
TypeModel
API也会公开。这将生成具有自定义模型类型的部件,可通过以下方式使用:

var serializer = new MyCustomSerializer();
其中
MyCustomSerializer:TypeModel
——尽管在本例中它不是
RuntimeTypeModel