protobuf-net - Serializer.PrepareSerializer 和 RuntTimeTypeModel.CompileInPlace 有什么区别
问题描述
请纠正我,对我来说这听起来像 Serializer.PrepareSerializer 和 RuntTimeTypeModel.CompileInPlace 做同样的事情?
解决方案
它们实际上是同一件事:
在通用Serializer
API 中,我们有:
/// <summary>
/// Precompiles the serializer for a given type.
/// </summary>
public static void PrepareSerializer<T>()
{
NonGeneric.PrepareSerializer(typeof(T));
}
在非通用Serializer
API 中:
/// <summary>
/// Precompiles the serializer for a given type.
/// </summary>
public static void PrepareSerializer(Type t)
{
#if FEAT_COMPILER
RuntimeTypeModel model = RuntimeTypeModel.Default;
model[model.MapType(t)].CompileInPlace();
#endif
}
这里的主要区别在于这PrepareSerializer
是一个 v1 API,而在 v1 中只有一个“模型”(即一组运行时配置数据),并且只有一个编译机制。在 v2 中,这扩展了一些 - 所以 v1 API 现在只调用默认CompileInPlace
的“模型”。
(MapType
是不相关的东西,与一些不再存在的代码相关联;MapType
已在未合并的分支中完全删除)
推荐阅读
- shell - 你如何用斜杠打印前两列?
- python - 使用 Python 在同一步骤中应用操作和除法操作
- javascript - 多模态代码不显示任何模态
- reactjs - React-Intl injectionIntl 不适用于 mergeProps
- javascript - 在 puppeteer 中加载页面之前设置本地存储项目?
- neo4j - 为什么单个 Neo4j 关系在 Cypher 查询结果中显示两次?
- email - 在 Woocommerce 确认电子邮件中显示高度之前的宽度
- server - 木偶服务器无法重启
- javascript - CanDeactivate 在 Angular 6 中无法正常工作
- python - 尝试在 Python 中查找断开连接的图