我见过MapAtRuntime()
AutoMapper 中的函数,这是我从智能感知中得到的解释:
不要预先计算该成员的执行计划,只需在运行时映射它。
通过不内联简化执行计划。
但它实际上有什么作用呢?我应该如何/何时使用它?
// I don't know if this is the correct usage, and what difference does it make
CreateMap<MyEntity, MyViewModel>()
.ForMember(dest => dest.MyField, opt => opt.MapAtRuntime());
我无法找到任何关于此的文档,只是GitHub 上的源代码 https://github.com/AutoMapper/AutoMapper/blob/master/src/UnitTests/Bug/MapAtRuntime/MapAtRuntime.cs:
但它实际上有什么作用呢?
我在中找到了以下内容官方文档“编译时间长”下 https://docs.automapper.org/en/v12.0.1/Configuration.html#long-compilation-times:
编译时间随着执行计划的大小而增加,这取决于属性的数量及其复杂性。理想情况下,您将修复您的模型,以便拥有许多小型 DTO,每个 DTO 都用于特定的用例。但您也可以在不更改类的情况下减小执行计划的大小。
您可以设置MapAtRuntime
每个会员或MaxExecutionPlanDepth
全局(默认为 1,将其设置为零)。
这些将通过用方法调用替换子对象的执行计划来减少执行计划的大小。编译会更快,但映射本身可能会更慢。搜索存储库以获取更多详细信息,并使用分析器更好地了解效果。避免PreserveReferences
and MaxDepth
也有帮助。
所以,通过使用.MapAtRuntime()
, the 执行计划 https://docs.automapper.org/en/v12.0.1/Understanding-your-mapping.html不会被预先计算。相反,它将在运行时进行映射。这通过不使用来简化执行计划内联映射 https://github.com/AutoMapper/AutoMapper/blob/73ba4003e49e37e5fffec49b67e7d9ea1cbb8a8a/src/AutoMapper/Configuration/MemberConfigurationExpression.cs#L22:
public void MapAtRuntime() => PropertyMapActions.Add(pm => pm.Inline = false);
我应该如何/何时使用它?
如果您的映射遇到性能下降并且执行计划非常复杂,您可以使用MapAtRuntime()
以再次提高性能。但是,如上所述,理想情况下,您应该降低模型的复杂性,从而提高映射的性能。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)