首先,如果这是一个菜鸟问题,请原谅我 - 但我是 protobuf-net
的新手。
我注意到有些人在使用 protobuf-net
进行序列化时使用 TypeModel.Create()
,而其他人则直接调用 Serializer
(意味着使用默认单例 RuntimeTypeModel.Default
)。
有什么区别?我假设如果我一直重复使用相同的 RuntimeTypeModel.Default
,我会获得一些性能优势,但是我要放弃什么来交换呢?
如果我在调用序列化时已经知道对象的类型
,哪种方法更好?
谢谢
最佳答案
k; Serializer.*
上的方法现在主要用作 RuntimeTypeModel.Default.*
的快捷方式。它们仍然存在的原因有以下三个:
- 方便
- 大量现有示例代码
- v1 API 兼容性
大多数人只需要一个模型。但是,系统支持具有不同配置的不同并行模型如果您需要的话。然而,在大多数用法中这是不太可能的:它确实使它大大更易于测试,因为我可以简单地使用不同的模型实例来重置整个系统。因此:您可以(如果您愿意,但大多数人不会)拥有多个模型实例的原因:
- 测试,主要是我自己:)
- 在不同布局/版本之间迁移
顺便说一句,如果您使用“预编译”功能(主要针对电话设备等),TypeModel
API 也会公开。这会生成一个具有自定义模型类型的程序集,可通过以下方式使用:
var serializer = new MyCustomSerializer();
其中 MyCustomSerializer : TypeModel
- 尽管在本例中它不是 RuntimeTypeModel
。
关于c# - TypeModel.Create的作用是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14913947/