Serializer.PrepareSerializer 和 RuntTimeTypeModel.CompileInPlace 有什么区别
What is the difference between Serializer.PrepareSerializer and 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中只有一个"model"(即一组运行时配置数据),而且只有一个编译机制。在 v2 中,这扩展了一些 - 所以 v1 API 现在只在 default "model".
上调用 CompileInPlace
(MapType
是不相关的东西,它与一些不再存在的代码相关联;MapType
已在未合并的分支中完全删除)
请纠正我,在我看来 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中只有一个"model"(即一组运行时配置数据),而且只有一个编译机制。在 v2 中,这扩展了一些 - 所以 v1 API 现在只在 default "model".
CompileInPlace
(MapType
是不相关的东西,它与一些不再存在的代码相关联;MapType
已在未合并的分支中完全删除)