AutoMapper 在映射时损害具有超过 1327 个 DTO 的 .net 应用程序的性能
AutoMapper hurting performance in .net application having more than 1327 DTO while mapping
我们在 Dot net 应用程序中使用 AutoMapper 3.1.1.0。
我们有很多 类 需要映射。
初始化映射所需的时间将近 22 秒。
我们几乎有 1327 个 DTO 需要映射。
我们可以说每个 DTO 平均有 8 个属性。
我担心的是我们在 1327 个映射 DTO 列表中检查的每条消息,
然后使用
if (MappingManager.MessageMappings.ContainsKey(message.GetType()))
{
var myMessage = Mapper.Map(message, message.GetType(), MappingManagerFile.MessageMappings[message.GetType()]);
所以它会影响性能。
我们需要在使用后处理,还是自动映射器自己处理?
在任务管理器中,执行此转换的组件占用大量内存。
所以请建议我们需要使用哪些替代方法来提高性能。
使用自动映射器映射那么多实体需要一些时间。您是急于加载您的实体还是使用延迟加载?我过去在使用延迟加载时看到过这些问题,因为 Automapper 在获取所有关系数据时会生成大量数据库命中。
预加载可能是您最好的选择,或者我建议只加载您需要的内容。好像要一次性加载很多数据。
更高版本的 AutoMapper 延迟编译配置。还有一些启动时间,发现和映射类型,但是编译运行时映射函数是延迟完成的。
我建议尝试 5.0 版本并比较数字。
我们在 Dot net 应用程序中使用 AutoMapper 3.1.1.0。 我们有很多 类 需要映射。 初始化映射所需的时间将近 22 秒。 我们几乎有 1327 个 DTO 需要映射。
我们可以说每个 DTO 平均有 8 个属性。
我担心的是我们在 1327 个映射 DTO 列表中检查的每条消息,
然后使用
if (MappingManager.MessageMappings.ContainsKey(message.GetType()))
{
var myMessage = Mapper.Map(message, message.GetType(), MappingManagerFile.MessageMappings[message.GetType()]);
所以它会影响性能。 我们需要在使用后处理,还是自动映射器自己处理? 在任务管理器中,执行此转换的组件占用大量内存。
所以请建议我们需要使用哪些替代方法来提高性能。
使用自动映射器映射那么多实体需要一些时间。您是急于加载您的实体还是使用延迟加载?我过去在使用延迟加载时看到过这些问题,因为 Automapper 在获取所有关系数据时会生成大量数据库命中。
预加载可能是您最好的选择,或者我建议只加载您需要的内容。好像要一次性加载很多数据。
更高版本的 AutoMapper 延迟编译配置。还有一些启动时间,发现和映射类型,但是编译运行时映射函数是延迟完成的。
我建议尝试 5.0 版本并比较数字。