Мы используем AutoMapper (версия 9) в проекте MVC5, где у нас около 100 бизнес-объектов. Оказалось, что конструктор MapperConfiguration тратит около 600 мс на выполнение в нашем случае, что, я считаю, слишком много.
protected AutoMapper.IMapper InitializeMapper()
{
var config = new MapperConfiguration(Configure);
return config.CreateMapper();
}
protected override void Configure(IMapperConfigurationExpression expression)
{
expression.CreateMap<User, UserViewModel>();
/* Configuration for other business entities. */
}
Конфигурация действительно довольно большая, около 1200 строк кода, но мне интересно, что именно этот класс делает так много времени?
Представьте, что мне нужно, чтобы пользователь посмотрелмодель. Это тривиально.
var viewModel = ModelMapper.Map<User, UserViewModel>(CurrentUser);
Тем не менее, он тратит 600 мс только на настройку всей карты. Вот след.
Можно ли сделать это намного быстрее? Интересно, есть ли «ленивая» обработка, когда преобразователь считывает конфигурацию постепенно. Я имею в виду, что если мне нужно только преобразовать сущность типа User в UserViewModel, вероятно, будет непросто инициализировать все карты типов в конфигурации.
Обратите внимание, что экземпляр сопоставителя создается при каждом запросе, и этоне может быть изменено.