问:如何通过在ARM设备上使用AutoMapper初始化地图来提高性能

时间:2018-08-13 12:49:52

标签: c# performance automapper

我们目前正在使用在ARM设备上运行的最新版本(7.0.1)在跨Windows(UWP)和Android(Xamarin Native)跨平台运行的客户端应用程序中使用AutoMapper。

我们的代码当前作为Mapper.Initialize调用的一部分,使用映射表达式创建了237个地图。其中一些地图非常复杂,需要额外的ForMember,BeforeMap和AfterMap调用。我们的某些模型也非常庞大,具有许多需要映射的属性。

在进行了一些初步调查之后,我们发现整个Mapper.Initialize调用有时可能需要大约12秒钟才能完成(在Android和Windows设备上经过ARM处理器测试)。不幸的是,这并不理想,因为我们需要在应用程序加载时为地图注册,因此请在扩展启动屏幕中对其进行初始化。

我们的应用程序以前使用ExpressMapper,具有相同数量的地图将在8秒内进入该应用程序。现在,我们希望使用AutoMapper从启动到应用准备运行20秒钟以上。进行更改的原因是,我们认为AutoMapper支持.NET Native,这是提交到Windows Store所必需的,而ExpressMapper不需要。

经过一些进一步的测试,我们可以确认该时间不是作为MapperConfigurationExpression的一部分在CreateMap调用期间花费的,而是在Initialize调用本身中。

对AutoMapper函数的一些进一步研究似乎可以使用inline mapping function,但是我们发现很多地图也有许多继承的对象,而这些对象具有自定义的CreateMap调用。

我们已经注意到AutoMapper具有用于Profiles的机制,但是根据文档不确定这是否是一种改进Initialize函数的方式,或者它是否仅仅是地图的容器而已。

我对性能的疑问是:

  1. 有人找到提高大量地图Initialize方法速度的方法吗?
  2. 如果不是,是否有可能我想着改进我创建地图的方式以加快Initialize方法的事情?

0 个答案:

没有答案