自动映射在映射1400记录时运行速度极慢

我正在使用AUtomapper,但我印象非常深刻,我有一个带有许多嵌套集合的复杂对象。 我正在使用Telerik OpenAccess,它会快速返回1400条记录,但是当我将它传递给Automapper时,它会慢慢变成荒谬的爬行。 这是我的代码供参考:

List query = httpContext.Events.Where(e => e.Inactive != true && e.Event_Locations != null).ToList(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.AssertConfigurationIsValid(); Mapper.AllowNullDestinationValues = true; IList result = Mapper.Map<List, List>(query); return result; 

救命!

我之前的工作中有一个团队也在使用Automapper,但最终由于性能影响而将其删除。

我认为在这个特定情况下,最好自己编写映射代码,或者逐个替换它们。 也许一个映射导致性能不佳?

我对automapper进行了基准测试。 2.0GHz Xeon的单核能够在一个小物体(3个属性)上每秒处理85,000个地图。 它比手动复制属性慢60倍。 如果您愿意,我可以为您评估其他值。

我不认为像这样的工具是为那么多的记录而设计的。 我认为AutoMapper设计用于映射视图模型,在屏幕上显示1400条记录是不正常的。

对于那些后来发布的人来说,AutoMapper 5.x版本的性能得到了显着提升,其中映射速度仅略微慢于手绘(1M项):

  • 原生:0.19s
  • AutoMapper:0.49秒
  • AutoMapper 4.2.1:29s