c# - TypeModel.Create的作用是什么?

标签 c# serialization protobuf-net

首先,如果这是一个菜鸟问题,请原谅我 - 但我是 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/

相关文章:

c# - 如何使用 Protobuf-Net 序列化接口(interface)对象的集合

.net - 如何使用通用基类定义 protobuf-net 模型?

f#:常量联合案例标记号

c# - Umbraco - 通过 URL 选择节点

c# - NHibernate 延迟加载但没有虚拟属性?

c# - 在 C# 7.3 中序列化非托管泛型类型

java - 如何将面板/框架保存到文件中然后读取它?

c# - 无法在静态方法中调用 Response.Redirect

c# - 无法绑定(bind)到文本 block - Windows Phone - MVVM

c++ - Protobuf重复字段反序列化